Задача к ЕГЭ по информатике на тему «Количество программ из A в B где траектория вычислений N команда» №1

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

1. Вычесть 4

2. Умножить на (-1)

Программа для исполнителя Отрицатель – это последовательность команд. Сколько различных неотрицательных результатов можно получить из исходного числа 123 в ходе исполнения программы, содержащей ровно 10 команд?

Рекурсия:

def f(x, k):
    global a
    if k == 0:
        a.add(x)
        return 0
    f(x - 4, k - 1)
    f(x * -1, k - 1)

a = set() # множество из значений
f(123, 10)
kol = 0 # количество неотрицательных чисел
for i in a:
    if i >= 0:
        kol += 1
print(kol)

 

Динамика:

a = [123]
for i in range(10):
    a = list(set(a))
    n = len(a)
    for j in range(n):
        l = a.pop(0)
        a.append(l - 4)
        a.append(l * (-1))
a = set(a)
print(len([j for j in a if j >= 0]))

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