Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 3
B. Прибавить 4
C. Умножить на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является число 44, и при этом траектория вычислений содержит числа 10 и 31?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 6 траектория состоит из чисел 12, 16, 19.
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x > y:
return 0
if x == y:
return 1
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
📌 Здесь учитываются все возможные команды исполнителя: A: +3, B: x + 4, C: ×2. Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Вывод ответа
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Выводим количество программ, переводящих 1 в 44: print(f(1, 10) * f(10, 31) * f(31, 44)).
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x > y:
return 0
if x == y:
return 1
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
📌 Здесь учитываются все возможные команды исполнителя: A: +3, B: x + 4, C: ×2. Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Вывод ответа
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Выводим количество программ, переводящих 1 в 44: print(f(1, 10) * f(10, 31) * f(31, 44)).
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x > y:
return 0
if x == y:
return 1
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x + 3, y) + f(x + 4, y) + f(x * 2, y)
📌 Здесь учитываются все возможные команды исполнителя: A: +3, B: x + 4, C: ×2. Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Вывод ответа
print(f(1, 10) * f(10, 31) * f(31, 44))
📌 Выводим количество программ, переводящих 1 в 44: print(f(1, 10) * f(10, 31) * f(31, 44)).