У исполнителя Удвоитель две команды, которым присвоены номера:
1. прибавь 1,
2. прибавь 4.
Первая из них увеличивает число на экране на 1, вторая увеличивает его на 4. Программа для Удвоителя — это последовательность команд. Сколько есть программ, которые число 3 преобразуют в число 16?
Для сложения справедлив коммутативный (переместительный) закон, значит, порядок команд в программе не имеет значения для результата.
Обе команды увеличивают исходное число, поэтому количество команд не может превосходить 16 — 3 = 13. При этом минимальное количество команд — 3 (т. к. [16 − 3]/4 = 3).
Команд может быть 4, 7, 10 или 13. Четырём командам соответствует набор 2221 (4 варианта расположения), семи командам — набор 2211111 (21 возможных вариантов расположения: это число перестановок с повторениями P7(2,5) = 5!/(2! · 3!)), десяти командам — набор 21...1 (10 возможных вариантов расположения) 13 командам — 11...1 (1 вариант расположения). Всего имеем 36 программ.
Ответ: 36.
Приведём другое решение на языке Python.
def f(x, y):
if x == y:
return 1
if x > y:
return 0
else:
return f(x + 1, y) + f(x + 4, y)
print(f(3, 16))

