Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:
1. прибавь 1
2. умножь на 2
Выполняя команду номер 1, КАЛЬКУЛЯТОР прибавляет к числу на экране 1, а выполняя
команду номер 2, умножает число на экране на 2. Укажите минимальное число команд, которое должен выполнить исполнитель, чтобы получить из числа 23 число 999.
Умножение на число обратимо не для любого числа, поэтому, если мы пойдём от числа 999 к числу 23, тогда однозначно восстановим программу с минимальным числом команд. Полученные команды будут записываться справа налево.
1) Число 999 не делится на 2, значит, оно получено прибавлением единицы к числу 998: 999 = 998 + 1 (команда 1).
2) Т. к. мы хотим получить минимальное число команд, то для получения числа 998 нужно использовать умножение: 998 = 499 * 2 (команда 2).
Далее, если число чётное, применяем рассуждение 2), если нечётное — рассуждение1), поэтому:
499 = 498 + 1 (команда 1);
498 = 249 * 2 (команда 2);
249 = 248 + 1 (команда 1);
248 = 124 * 2 (команда 2);
124 = 62 * 2 (команда 2);
62 = 31 * 2 (команда 2);
31 = 30 + 1 (команда 1).
Заметим, что далее мы не можем применять рассуждение 2), потому что 30 = 15 * 2, а 15 < 23, т. е. меньше начального числа. А поскольку мы не имеем команды вычитания, то и получить число 15 не можем. Следовательно, 30 = 23 + 7 (7 раз применили команду 1).
Таким образом, для получения из числа 23 числа 999 необходимо применить следующую последовательность команд: 1111111122212121. Считаем количество команд и получаем ответ: 16.
Ответ: 16.

