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