Задача к ЕГЭ по информатике на тему «количество программ из a в b смешанное» №1

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

  1. Прибавить 2
  2. Умножить на 3

Первая команда увеличивает число на экране на 2,  вторая — увеличивает число в 3  раза. Программа для исполнителя Крабоед — это последовательность команд. Сколько существует программ, для которых при исходном числе 10  результатом является число 100,  и при этом траектория вычислений не содержит 99  и содержит 50  ?

Решение 1 (Рекурсия)

def f(s, fi, flag):
    if s > fi:
        return 0
    if s == 99:
        return 0
    if s == 50:
        flag = True
    if s == fi and flag:
        return 1
    return f(s + 2, fi, flag) + f(s * 3, fi, flag)
print(f(10, 100, False))

Решение 2 (Динамика)

a = [0] * 101
a[10] = 1
for i in range(11, 101):
    a[i] = a[i - 2] + a[i // 3] * (i % 3 == 0)
    if i == 99:
        a[i] = 0
    if i == 50:
        for j in range(i):
            a[j] = 0
print(a[100])

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