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