2301.py
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 3
B. Вычесть 4
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых
при исходном числе 47 результат — число 6,
при этом траектория вычислений не содержит число 25 и содержит 15?
Траектория вычислений программы — это последовательность результатов
выполнения всех команд программы. Например, для программы CBA
при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 3
B. Вычесть 4
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых
при исходном числе 47 результат — число 6,
при этом траектория вычислений не содержит число 25 и содержит 15?
Траектория вычислений программы — это последовательность результатов
выполнения всех команд программы. Например, для программы CBA
при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""
def F(s, end, netu):
if s == end:
return 1
if s < end or s == netu: # промахнулись ниже цели или попали в запрет
return 0
return F(s - 3, end, netu) + F(s - 4, end, netu) + F(s // 3, end, netu)
print(F(47, 15, 25) * F(15, 6, 25))
"""
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 3
B. Вычесть 4
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых
при исходном числе 47 результат — число 6,
при этом траектория вычислений не содержит число 25 и содержит 15?
Траектория вычислений программы — это последовательность результатов
выполнения всех команд программы. Например, для программы CBA
при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""
def F(s, end, netu):
if s == end:
return 1
if s < end or s == netu: # промахнулись ниже цели или попали в запрет
return 0
return F(s - 3, end, netu) + F(s - 4, end, netu) + F(s // 3, end, netu)
print(F(47, 15, 25) * F(15, 6, 25))