Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
1. Увеличь на 8
2. Уменьши на 4
3. Раздели на 2
Причём команду 3 можно применять только для чётных чисел. Программа для исполнителя – это последовательность команд.
Сколько различных натуральных результатов можно получить при исходном числе 16 в ходе исполнения программы, содержащей ровно 10 команд, если известно, что нельзя повторять третью команду, если она была использована на предыдущем шаге.
Программное решение:
# Множество различных результатов работы программы
# c — номер команды на предыдущем шаге
# k — счётчик количества совершенных команд
def f(a, c = 0, k = 0):
if k == 10:
if a >= 1:
s.add(a)
return 0
f(a + 8, 1, k + 1)
f(a - 4, 2, k + 1)
if c != 3 and a % 2 == 0:
f(a // 2, 3, k + 1)
s = set()
f(16)
print(len(s))