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