Исполнитель ТренерБ преобразует число, записанное на экране. У исполнителя три команды, которым присвоены номера:
1. Прибавь 1
2. Прибавь 2
3. Прибавь 6
Первая из них увеличивает число на экране на 1, вторая увеличивает это число на 2, а третья — на 6. Программа для исполнителя ТренерБ — это последовательность команд. Сколько существует программ, которые число 21 преобразуют в число 30?
Для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения для результата.
Все команды увеличивают исходное число, поэтому количество команд не может превосходить (30 − 21) = 9. При этом минимальное количество команд — 3.
Порядок команд не имеет значения, каждому числу команд соответствует один набор команд, которые можно расположить в любом порядке.
Рассмотрим все возможные наборы и вычислим количество вариантов рассположения команд в них.
Набор 1 1111 1111 имеет один возможный вариант.
Набор 1111 1112 — 8 вариантов.
Набор 111 1122 — 21 возможный вариант расположения: это число перестановок с повторениями 7!/(5!·2!).
Набор 11 1222 — 20 вариантов.
Набор 1 2222 — 5 вариантов.
Набор 1 113 — 4 варианта.
Набор 123 — 6 вариантов: это число перестановок: 3!.
Всего имеем: 1 + 8 + 21 + 20 + 5 + 4 + 6 = 65 программ.
Ответ: 65.
Приведём другое решение на языке 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 + 6, y)
print(f(21, 30))

