Предмет: Информатика, автор: MaYulchiksushcher

Исполнитель Увеличитель345 преобразует число, записанное на экране. У исполнителя
три команды, которым присвоены номера:
1. Прибавь 3
2. Прибавь 4
3. Прибавь 5
Первая из них увеличивает число на экране на 3, вторая увеличивает это число на 4,
а третья – на 5. Программа для исполнителя Увеличитель345 – это последовательность
команд.
Определите, сколько существует программ, преобразующих число 22 в число 80.
Задачу можно решать как с помощью электронной таблицы, так и путем составления
программы.

Ответы

Автор ответа: nelle987
0
Можно решать задачу по-другому, используя динамическое программирование.
Обозначим F[n] - число способов получить число n и положим F[18]=F[19]=F[20]=F[21]=0, а F[22]=1. Тогда F[k] = F[k-3]+F[k-4]+F[k-5] для любого k >= 23.
(Почему так? Возьмём некоторое число k. Его можно получить из чисел k-3, k-4, k-5 путём прибавления тройки, четвёрки и пятёрки соответственно, притом если мы договорились, например, что последней операцией будем прибавление пятёрки, то число способов получить число k будет равно числу способов получить k-5, ведь последнюю операцию мы определим однозначно. Поэтому число способов получить k - сумма количеств способов получить k-3, k-4 и k-5)
Итак, F[k] = F[k-3]+F[k-4]+F[k-5], F[18]=F[19]=F[20]=F[21]=0 и F[22]=1. По этой рекуррентной формуле можно даже посчитать вручную (это будет немного долго), или воспользоваться компьютером. Например, на python 3 можно написать такую программу:
a = [0] * 5;n = 22;a[n % 5] = 1;while n < 80:    n += 1;    a[n % 5] = a[(n-3) % 5] + a[(n-4) % 5] + a[(n-5) % 5]print(a[n % 5])

Ответ: 3174448
Похожие вопросы