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