Исполнитель РазДва преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1.
2. Умножить на 2.
Первая команда увеличивает число на экране
Сколько существует программ, которые преобразуют исходное
Траектория вычислений — это последовательность результатов выполнения всех команд программы. Например, для программы 212 при исходном
Искомое количество программ равно количеству программ, получающих
Пусть R(n) — количество программ, которые
Верно следующее соотношение:
Найдём количество программ, преобразующих
R(2) = 1;
R(3) = 1;
R(4) = 2;
R(5) = 2;
R(6) = 3;
R(7) = 3;
R(8) = 5;
R(9) = 5;
R(10) = 7;
R(11) = 7.
Из числа 11 число 24 можно получить только последовательностью команд 211, поскольку траектория не должна содержать
Найдём количество программ, преобразующих
R(2) = 1;
R(3) = 1;
R(4) = 2;
R(5) = 2;
R(6) = 3.
Из числа 6 число 24 можно получить либо последовательностью команд 22, либо последовательностью команд 21..1, поскольку траектория не должна содержать
Таким образом, ответ — 7 + 6 = 13.
Ответ: 13.
Приведём другое решение Лапташкина Виталия на языке Python.
def ab1(s, f):
if s > f or s == 12:
return 0
elif s == f:
return 1
else:
return ab1(s+1, f) + ab1(s*2, f)
def ab2(s, f):
if s > f or s == 11:
return 0
elif s == f:
return 1
else:
return ab2(s+1, f) + ab2(s*2, f)
print(ab2(2, 12) * ab2(12, 24)+(ab1(2, 11) * ab1(11, 24)))

