Исполнитель Щелчок преобразует число на экране. У исполнителя есть три команды:
1. Прибавить
2. Прибавить
3. Умножить на
Программа для исполнителя — это последовательность команд.
Сколько существует различных результатов выполнения программ, содержащих команд и начинающих свою работу из
. При этом траектория вычислений исполнителя содержит не более трех нечетных чисел.
Траектория вычислений — это последовательность результатов выполнения всех команд программы. Например, для программы при исходном числе
траектория будет состоять из чисел
.
Стоит сказать, что динамическое решение данной задачи получается достаточно трудоемким. Поэтому рекомендуется решать эту задачу с помощью рекурсии.
Решение 1 (Рекурсия)
def f(st, count_odd, count, end_count):
global A
if count == end_count and count_odd <= 3:
A.add(st)
if count_odd > 3 or count > end_count:
return
f(st + 1, count_odd + (st % 2 == 0), count + 1, end_count)
f(st * 3, count_odd + (st % 2 == 1), count + 1, end_count)
f(st + 3, count_odd + (st % 2 == 0), count + 1, end_count)
A = set()
f(2, 0, 0, 10)
print(len(A))
Решение 2 (Динамика)
ans, otv = set(), set()
ans.add((2, 0))
for operations in range(10):
can_get = set()
for i in ans:
ch, chet = i
if chet + (ch + 1) % 2 <= 3:
can_get.add((ch + 1, chet + (ch + 1) % 2))
if chet + (ch + 3) % 2 <= 3:
can_get.add((ch + 3, chet + (ch + 3) % 2))
if chet + (ch * 3) % 2 <= 3:
can_get.add((ch * 3, chet + (ch * 3) % 2))
ans = can_get
for i in ans:
a, b = i
otv.add(a)
print(len(otv))