OpenFIPI 2.0

23

5

De167D

Исполнитель преобразует число на экране.

У исполнителя есть три команды, которые обозначены латинскими буквами:

A. Вычесть 1

B. Вычесть 3

C. Найти целую часть от деления на 2

Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 19 результатом является число 3, при этом траектория вычислений не содержит числа 9 и содержит 12?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 13 траектория состоит из чисел 6, 3, 2.

153

def f(n, b):
    if n == b:  # попали
        return 1
    if n == 9:  # не содержит 9
        return 0
    if n < b:  # перепрыгнули
        return 0
    # недопрыгнули
    return f(n - 1, b) + f(n - 3, b) + f(n // 2, b)

# содержит 10
print(f(19, 12) * f(12, 3))

Просмотреть отправленные ответы De167D