Задача к ЕГЭ по информатике на тему «количество программ из a в b где траектория вычислений содержит число(-а)» №3

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

1. Прибавить 1

2. Умножить на 2

3. Прибавить 2

Первая команда увеличивает число на экране на 1, вторая умножает его на 2, третья увеличивает число на 2.

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

Сколько существует программ, которые преобразуют исходное число 3 в число 23, и при этом траектория вычислений содержит ровно одно из чисел 8 и 13?

Решение программой:

def f(x, y, is_8 = 0, is_13 = 0):
    if x == 8:
        is_8 = 1
    if x == 13:
        is_13 = 1

    if x > y:
        return 0
    if x == y and is_8 != is_13:
        return 1
    if x < y:
        return f(x + 1, y, is_8, is_13) + f(x * 2, y, is_8, is_13) + f(x + 2, y, is_8, is_13)
    return 0

print(f(3, 23))

Ответ: 7003
Оцените статью
Я решу все!