Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 64 результатом является число 4, и при этом траектория вычислений не содержит числа 10 и содержит 21?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ABB при исходном числе 13 траектория состоит из чисел 12, 4, 1.
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
💡 Поэтому задачу удобно разбить на два этапа:
пути от 64 до 21;
пути от 21 до 4.
И затем перемножить количества программ для этих этапов.
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x == 10 or x < y:
return 0
if x == y:
return 1
return f(x - 1, y) + f(x // 3, y)
print(f(64, 21) * f(21, 4))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x - 1, y) + f(x // 3, y)
📌 Здесь учитываются все возможные команды исполнителя: A: -1, B: ÷3 (целая часть). Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Учитываем обязательное число 21
print(f(64, 21) * f(21, 4))
📌 Почему умножаем:
каждую программу 64 → 21 можно продолжить любой программой 21 → 4;
число 21 гарантированно входит в траекторию;
запрещённые значения исключаются на обоих этапах.
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
💡 Поэтому задачу удобно разбить на два этапа:
пути от 64 до 21;
пути от 21 до 4.
И затем перемножить количества программ для этих этапов.
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x == 10 or x < y:
return 0
if x == y:
return 1
return f(x - 1, y) + f(x // 3, y)
print(f(64, 21) * f(21, 4))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x - 1, y) + f(x // 3, y)
📌 Здесь учитываются все возможные команды исполнителя: A: -1, B: ÷3 (целая часть). Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Учитываем обязательное число 21
print(f(64, 21) * f(21, 4))
📌 Почему умножаем:
каждую программу 64 → 21 можно продолжить любой программой 21 → 4;
число 21 гарантированно входит в траекторию;
запрещённые значения исключаются на обоих этапах.
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
💡 Поэтому задачу удобно разбить на два этапа:
пути от 64 до 21;
пути от 21 до 4.
И затем перемножить количества программ для этих этапов.
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x == 10 or x < y:
return 0
if x == y:
return 1
return f(x - 1, y) + f(x // 3, y)
print(f(64, 21) * f(21, 4))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x - 1, y) + f(x // 3, y)
📌 Здесь учитываются все возможные команды исполнителя: A: -1, B: ÷3 (целая часть). Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Учитываем обязательное число 21
print(f(64, 21) * f(21, 4))
📌 Почему умножаем:
каждую программу 64 → 21 можно продолжить любой программой 21 → 4;
число 21 гарантированно входит в траекторию;
запрещённые значения исключаются на обоих этапах.