Исполнитель ТренерА преобразует число, записанное на экране. У исполнителя три команды, которым присвоены номера:
1. Прибавь 1
2. Прибавь 2
3. Прибавь 5
Первая из них увеличивает число на экране на 1, вторая увеличивает это число на 2, а третья — на 5. Программа для исполнителя ТренерА — это последовательность команд. Сколько существует программ, которые число 21 преобразуют в число 30?
Для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения для результата.
Все команды увеличивают исходное число, поэтому количество команд не может превосходить (30 − 21) = 9. При этом минимальное количество команд — 3.
Таким образом, команд может быть 3, 4, 5, 6, 7, 8 или 9. Поэтому порядок команд не имеет значения, каждому числу команд соответствует один набор команд, которые можно расположить в любом порядке.
Рассмотрим все возможные наборы и вычислим количество вариантов рассположения команд в них.
Набор 1 1111 1111 имеет один возможный вариант.
Набор 1111 1112 — 8 вариантов.
Набор 111 1122 — 21 возможный вариант расположения: это число перестановок с повторениями 7!/(5!·2!).
Набор 11 1222 — 20 вариантов.
Набор 1 2222 — 5 вариантов.
Набор 1 1113 — 5 вариантов.
Набор 1123 — 12 вариантов: это число перестановок с повторениями 4!/(2!·1!·1!)).
Набор 223 — 3 варианта.
Всего имеем: 1 + 8 + 21 + 20 + 5 + 5 + 12 + 3 = 75 программ.
Ответ: 75.
Приведём другое решение на языке Python.
def f(x, y):
if x == y:
return 1
if x > y:
return 0
else:
return f(x + 1, y) + f(x + 2, y) + f(x + 5, y)
print(f(21, 30))

