Исполнитель Отрицатель преобразует число, записанное на доске. У исполнителя есть две команды:
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]))