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