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