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