Шаблон программного решения:
def F(x, y): # возвращает количество путей из x в y
# если начальное больше
if x > y or x == <число, не содержащееся в траектории>:
return 0 # возвращаем 0 путей
# количество путей из числа в само себя равно 1
if x == y:
return 1
# в остальных случаях x < y
return <Сумма функций с учетом команд>
# в выводе указываем начало, конец, а также все промежуточные числа по траектории
print(F(<начальное знач>, <доп. знач. 1>) * F(<доп. знач. 2>, <конечное знач.>) )
Если в условии есть команды «вычти» или «подели», то изменяем в шаблоне: if x > y: на if x < y:
Пример задания
Исполнитель К20 преобразует число, записанное на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Увеличить старшую цифру числа на 1
Первая команда увеличивает число на экране на 1, вторая увеличивает на 1 старшую (левую) цифру числа. Например, число 23 с помощью такой команды превратится в число 33. Если старшая цифра числа равна 9, то вторая команда оставляет это число неизменным. Программа для исполнителя — это последовательность команд. Сколько существует таких программ, которые исходное число 10 преобразуют в число 43?
Решение. Выполнить команду 2 для исполнителя, зная, что в данной ситуации работа ведется с двузначными числами, можно следующим образом: x + 10. Напишем программу с использованием рекурсии для поиска количества путей:
def F(x, y):
if x > y:
return 0 # возвращаем 0 путей
if x == y:
return 1
return F(x + 1, y) + F(x + 10, y)
print(F(10, 43))
Ответ: 150
Или вот такую программу предлагает ИИ для той же задачи:
def count_programs(start, target):
dp = [0] * (target + 1)
dp[start] = 1
for x in range(start, target):
# Команда 1: Прибавить 1
dp[x + 1] += dp[x]
# Команда 2: Увеличить старшую цифру на 1
str_x = str(x)
if str_x[0] != '9': # Если старшая цифра не 9
new_number = int(str_x[0]) + 1
new_x = new_number * (10 ** (len(str_x) - 1)) + int(str_x[1:])
if new_x <= target:
dp[new_x] += dp[x]
return dp[target]
start = 10
target = 43
result = count_programs(start, target)
print(f"Количество программ, преобразующих {start} в {target}: {result}")
Прототипы с ЕГЭ
Задача №1 Исполнитель А16 преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 2
3. Умножить на 2
Первая из них увеличивает число на экране на 1, вторая увеличивает его на 2, третья умножает его на 2. Программа для исполнителя А16 – это последовательность команд.
Сколько существует таких программ, которые исходное число 3 преобразуют в число 12 и при этом траектория вычислений программы содержит число 10?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 132 при исходном числе 7 траектория будет состоять из чисел 8, 16, 18.
Ответ: 60
Задача №2 Исполнитель Май преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Май — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является число 39 и при этом траектория вычислений содержит числа 7 и 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.
Ответ: 45
Задача №3 Исполнитель преобразует число, записанное на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 2
3. Умножить на 3
Первая команда увеличивает число на 1, вторая – на 2, третья - втрое. Программа для исполнителя – это последовательность команд.
Сколько существует таких программ, которые исходное число 2 преобразуют в число 19 и при этом траектория вычислений программы проходит через 9 и не проходит через 12?
Ответ: 650
Задача №4 Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Вычти 1
2. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 1, вторая заменяет число на экране на целую часть от деления числа на 2. Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 30 результатом является число 1, и при этом траектория вычислений содержит число 12?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 122 при исходном числе 10 траектория состоит из чисел 9, 4, 2.
Ответ: 376
Задача №5 Исполнитель Троечка преобразует число, записанное на доске. У Троечки есть две команды:
1. Вычесть 3
2. Умножить на -3
Первая команда уменьшает число на 3, вторая команда умножает его на –3. Сколько различных отрицательных результатов можно получить из исходного числа 333 в ходе исполнения программы, содержащей ровно 13 команд?
Ответ: 2224
Задача №6 Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Умножить на 2
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является число 20, при этом траектория вычислений не содержит числа 11?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 4 траектория будет состоять из чисел 16, 32, 33.
Ответ: 37
Задания уровня ЕГЭ
Задача №1 Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 2
3. Умножить на 2
Первая команда увеличивает число на 1, вторая – на 2, третья – вдвое. Программа для исполнителя – это последовательность команд.
Сколько существует таких программ, которые исходное число 3 преобразуют в число 25 и при этом в программе есть все три команды?
Ответ: 15092
Задача №2 Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
3. Сделать нечетное
Первая команда увеличивает число на 1, вторая – вдвое, третья прибавляет к четному числу 1, к нечетному – 2. Программа для исполнителя – это последовательность команд.
Сколько существует таких программ, которые исходное число 3 преобразуют в число 25 и при этом траектория вычислений программы содержит число 9 и число 17?
Ответ: 229635
Задача №3 Исполнитель Джысум преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить значение младшего разряда
2. Умножить на значение старшего разряда
3. Прибавить разность большего и меньшего по значению разрядов
Первая команда не применима к числам, кратным 10. Вторая команда не применима к числам, меньшим 20. Третья команда не применима к числам c одинаковыми цифрами. Например, при применении команды 1 к числу 19 получим число 28, при применении команды 2 к числу 22 – 44, команды 3 к 41 – 44.
Сколько существует таких программ, которые исходное число 21 преобразуют в число 62?
Ответ: 142
Задача №4 У исполнителя Калькулятор две команды, которым присвоены номера:
1. прибавь 1
2. увеличь число десятков на 1
Например: при помощи команды 2 число 23 преобразуется в 33. Если перед выполнением команды 2 вторая с конца цифра равна 9, она не изменяется.
Сколько есть программ, которые число 10 преобразуют в число 33?
Ответ: 25