У исполнителя Удвоитель две команды, которым присвоены номера:
1. прибавь 2,
2. прибавь 4.
Первая из них увеличивает на 2 число на экране, вторая увеличивает это число на 4.
Программа для Удвоителя — это последовательность команд. Сколько существует программ, которые число 4 преобразуют в число 22?
Для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения для результата.
Обе команды увеличивают исходное число, поэтому количество команд не может превосходить (22 − 4)/2 = 9. При этом минимальное количество команд — 5 (т. к. (22 −4)/4 = 4).
Таким образом, команд может быть 5, 6, 7, 8 или 9. Как было сказано выше, порядок команд не имеет значения, каждому числу команд соответствует один набор команд, которые можно расположить в любом порядке. Пяти командам соответствует набор 22221 (5 возможных вариантов расположения), 6 командам — набор 222111 (здесь получается 20 возможных вариантов расположения: это число перестановок с повторениями P6(3,3)=6!/(3! · 3!)), 7 командам — 2211111 (21 возможных вариантов расположения), 8 командам — 21111111 (8 возможных вариантов расположения), 9 командам — 111111111 (1 вариант расположения). Всего имеем 55 программ.
Ответ: 55.
Приведём другое решение на языке 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(4, 22))

