Регистрация
Войти
Стать экспертом Правила
Информатика

посчитайте решитьИсполнитель Июнь17 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:1. Прибавить 12. Сделай нечётноеВыполняя первую команду, исполнитель увеличивает число на 1, а выполняя вторую – из числа x получает число 2x + 1. Как узнать сколько существует программ, для которых при исходном числе 1 результатом является число 31 и при этом траектория вычислений не содержит число 25?

ОТВЕТЫ

44

Из 25 сделать 31 можно только одним способом, 6 раз прибавив 1: любая операция "сделай нечетное" выдаст число, не меньшее 2\cdot25+1=51. Тогда количество всех команд, которые получают 31, проходя через 25, равно количеству команд, которые просто получают 25.

Используя написанное выше, можно поступить так: посчитать количество программ, получающих 31, и вычесть из неё количество команд, получающих 25. Это и будет ом.

Пусть a(n) - количество программ, получающих из 1 число n. Например, a(1) = a(2) = 1: 1 получает единственная (пустая) программа, а 2 можно получить при помощи команды "прибавить 1"

Если n четное, то последняя команда в программе - прибавление 1, a(n) = a(n - 1).

Если n нечетное, то последняя команда в программе - либо прибавление 1, либо "сделай нечетное" из числа (n - 1)/2; a(n) = a(n - 1) + a((n - 1)/2).

Начинаю считать:

a(3) = a(2) + a(1) = 2

a(4) = a(3) = 2

a(5) = a(4) + a(2) = 3

a(6) = a(5) = 3

a(7) = a(6) + a(3) = 3 + 2 = 5

... и т.д.

Итоговая таблица для всех n от 1 до 31:

\begin{array}{||c|c||c|c||c|c||c|c||}n&a(n)&n&a(n)&n&a(n)&n&a(n)\\1&1&9&7&17&23&25&57\\2&1&10&7&18&23&26&57\\3&2&11&10&19&30&27&70\\4&2&12&10&20&30&28&70\\5&3&13&13&21&37&29&83\\6&3&14&13&22&37&30&83\\7&5&15&18&23&47&31&101\\8&5&16&18&24&47\end{array}

- это a(31) - a(25).

352
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам