Задание №5 — Алгоритмы и программирование
У исполнителя Удвоитель две команды, которым присвоены номера:
1. умножь на 2
2. прибавь 3
Первая из них увеличивает число на экране в 2 раза, вторая прибавляет к числу 3.
Составьте алгоритм получения из числа 1 числа 38, содержащий не более 5 команд. В ответе запишите только номера команд.
(Например, 12211 это алгоритм:
умножь на 2
прибавь 3
прибавь 3
умножь на 2
умножь на 2
который преобразует число 1 в 32.)
Если таких алгоритмов более одного, то запишите любой из них.
Правильный ответ
21121
Пояснение
Решение.
Нам необходимо составить алгоритм для исполнителя «Удвоитель», который превращает число в число ровно за шагов (или меньше). У нас есть две команды: 1 (умножить на ) и 2 (прибавить ).
Для решения таких задач удобнее всего двигаться «с конца» — от итогового числа к исходному числу . При этом действия заменяются на обратные: вместо умножения на мы будем делить на (если число чётное), а вместо прибавления будем вычитать .
Шаг 1. Начнём с числа . Оно чётное, поэтому его можно разделить на .
. (Это обратная команда 1).
Если бы мы вычли , получили бы , что не делится на , и путь к единице стал бы длиннее.
Шаг 2. Теперь у нас число . Оно нечётное, на не делится. Значит, единственный вариант — вычесть .
. (Это обратная команда 2).
Шаг 3. Число чётное. Попробуем разделить на .
. (Это обратная команда 1).
Шаг 4. Число чётное. Снова разделим на .
. (Это обратная команда 1).
Заметим: если бы мы на этом шаге вычли , получили бы , из которого за один шаг до не добраться.
Шаг 5. Из числа нам нужно получить . Вычтем .
. (Это обратная команда 2).
Мы пришли к числу за шагов. Теперь запишем команды в прямом порядке (от к ), заменяя обратные действия на исходные:
1. (Шаг 5 наоборот): (команда 2)
2. (Шаг 4 наоборот): (команда 1)
3. (Шаг 3 наоборот): (команда 1)
4. (Шаг 2 наоборот): (команда 2)
5. (Шаг 1 наоборот): (команда 1)
Последовательность номеров команд: .
Проверка:
.
Алгоритм верный и содержит ровно команд.
Ответ: 21121
Источник: ФИПИ