Исполнитель Вычитатель преобразует число, которое записано на экране. У исполнителя Вычитатель две команды, которым присвоены номера.
1. Вычти 2.
2. Вычти 5.
Первая из них уменьшает число на экране
Для вычитания справедлив коммутативный (переместительный) закон, значит, порядок команд в программе не имеет значения для результата.
Обе команды уменьшают исходное число, поэтому количество команд не может превосходить (22 — 2)/2 = 10. При этом минимальное количество команд — 4 (так как
Иначе говоря, команд может быть от четырёх, до десяти.
Четырём командам соответствует набор 2222.
При помощи пяти команд нельзя преобразовать
При помощи шести команд нельзя преобразовать
Семи командам соответствует набор 111 1122. (21 возможный вариант расположения: это число перестановок с повторениями
При помощи восьми команд нельзя преобразовать
При помощи девяти команд нельзя преобразовать
Десяти командам соответствует набор 11 1111 1111.
Всего имеем
Ответ: 23.
Приведём другое решение на языке Python.
def f(x, y):
if x < y:
return 0
if x == y:
return 1
else:
return f(x - 2, y) + f(x - 5, y)
print(f(22, 2))

