У исполнителя Удвоитель две команды, которым присвоены номера:
1. прибавь 2,
2. прибавь 4.
Первая из них увеличивает на 2 число на экране, вторая увеличивает это число на 4.
Программа для Удвоителя — это последовательность команд. Сколько существует программ, которые число 2 преобразуют в число 22?
Для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения для результата.
Обе команды увеличивают исходное число, поэтому количество команд не может превосходить (22 − 2)/2 = 10. При этом минимальное количество команд — 5 (т. к. (22 −2)/4 = 5).
Таким образом, команд может быть 5, 6, 7, 8, 9 или 10. Как было сказано выше, порядок команд не имеет значения, каждому числу команд соответствует один набор команд, которые можно расположить в любом порядке. Пяти командам соответствует набор 22222 (1 возможный вариант расположения), 6 командам — набор 222211 (здесь получается 15 возможных вариантов расположения: это число перестановок с повторениями P6(2,4)=6!/(2! · 4!)), 7 командам — 2221111 (35 возможных вариантов расположения), 8 командам — 22111111 (28 возможных вариантов расположения), 9 командам — 211111111 (9 вариантов расположения), 10 командам — 1111111111 (1 вариант расположения). Всего имеем 89 программ.
Ответ: 89.
Приведём другое решение на языке Python.
def f(x, y):
if x == y:
return 1
if x > y:
return 0
else:
return f(x + 2, y) + f(x + 4, y)
print(f(2, 22))

