Все статьи по ЕГЭ
6 сент. 2025 г. - 14 мин. чтения
ЕГЭ Задание 23

ЕГЭ Задание 23

Оператор присваивания и ветвления. Перебор вариантов построения дерева

@ashtana

Штана Альберт Игоревич

Типы заданий № 23

В этой статье будет разобрано задание 23.

Рассмотрим типовые задачи из двадцать третьего задания ЕГЭ по информатике.

Данное задание относится к повышенному уровню сложности.

Время выполнения задания ≈ 8 минут.

Данное задание проверяет умение анализировать ход исполнения алгоритма. Решение программируется на Python.

Задача 1 (Демоверсия ЕГЭ 2024)

Исполнитель преобразует число на экране. У исполнителя есть две команды:

  1. Вычти 2
  2. Найди целую часть от деления на 2

Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.

Решение:
Решение на Python
# Функция которая вызывает сама себя сделает всю работу
def f(in_num, out_num):  # in_num исходное число, out_num результат
    if in_num == out_num:  # если из исходного числа получился результат
        return 1
    if in_num > out_num or 11 == in_num:  # Если получилось исходное число больше результата или число 11
        return 0
    if in_num < out_num:  # Если исходное число меньше результат продолжаем выполнять команды
        # Вызываем рекурсивно команды исполнителя, чтобы получить траекторию вычислений со всеми вариантами чисел
        # Чтобы понять как это будет работать - запустите пример в режиме отладки
        return f(in_num + 1, out_num) + f(in_num * 2, out_num) + f(in_num * in_num, out_num)


# Выводим результат
print(f(2, 20))  # по условию задачи исходное число 2, результат 20

Ответ: 37

Задача 2

У исполнителя Удвоитель две команды, которым присвоены номера:

  1. прибавить 3,
  2. умножить на 2.

Первая из них увеличивает число на экране на 3, вторая - удваивает его.

Программа для Удвоителя - это последовательность команд.

Сколько есть программ, которые число 1 преобразуют в число 25 ?

Решение:
Решение на Python
def f(x, y):
    if x == y: 
        return 1
    if x > y: 
        return 0
    if x < y: 
        return f(x + 3, y) + f(x * 2, y)


print(f(1, 25))

Ответ: 9

Задача 3

Исполнитель НечетМ преобразует число на экране. У исполнителя НечетМ две команды, которым присвоены номера:

  1. прибавь 1
  2. сделай нечётное

Первая из этих команд увеличивает число x на экране на 1, вторая переводит число x в число 2x+1. Например, вторая команда переводит число 10 в число 21. Программа для исполнителя НечетМ — это последовательность команд.

Сколько существует таких программ, которые число 1 преобразуют в число 25, причём траектория вычислений не содержит число 24?

Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 17, 18.

Решение:
Решение на Python
def f(x, y):
    if x == y:
        return 1
    if x > y or x == 24:
        return 0
    if x < y:
        return f(x + 1, y) + f(x * 2 + 1, y)


print(f(1, 25))

Ответ: 10

Задача 4

У исполнителя есть три команды, которым присвоены номера:

  1. Прибавить 1
  2. Умножить на 3
  3. Прибавить 2

Первая команда увеличивает число на экране на 1, вторая умножает его на 3, третья увеличивает его на 2.

Сколько существует программ, которые преобразуют исходное число 2 в число 12 и при этом траектория вычислений содержит число 9 и число 11?

Траектория вычислений программы - это последовательность результатов выполнения всех команд программы. Например, для программы 132 при исходном числе 7 траектория будет состоять из чисел 8, 10, 30.

Решение:
Решение на Python
def f(x, y):
    if x == y: 
        return 1
    if x > y: 
        return 0
    if x < y: 
        return f(x + 1, y) + f(x * 3, y) + f(x + 2, y)


print(f(2, 9) * f(9, 11) * f(11, 12))

Ответ: 50

Задача 5

Исполнитель Май17 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:

  1. Прибавить 1
  2. Прибавить 3

Первая команда увеличивает число на экране на 1, вторая увеличивает его на 3. Программа для исполнителя Май17 — это последовательность команд.

Сколько существует программ, для которых при исходном числе 1 результатом является число 17 и при этом траектория вычислений содержит число 9?

Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 12 при исходном числе 7 траектория будет состоять из чисел 8, 11, 12.

Решение:
Решение на Python
def f(x, y):
    if x == y: 
        return 1
    if x > y: 
        return 0
    if x < y: 
        return f(x + 1, y) + f(x + 3, y)


print(f(1, 9) * f(9, 17))

Ответ: 169

Задача 6 (Демоверсия ЕГЭ 2025)

Исполнитель преобразует число на экране. У исполнителя есть две команды:

  1. Вычти 2
  2. Найди целую часть от деления на 2

Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.

Решение:
Решение на Python
def f(in_num, out_num):  # in_num исходное число, out_num результат
    if in_num == out_num:  # Если из исходного числа получился результат
        return 1
    if in_num < out_num:  # Если получилось исходное число меньше результата, решения нет
        return 0
    if in_num > out_num:  # Если исходное число больше результата продолжаем выполнять команды
        # Вызываем рекурсивно команды исполнителя, чтобы получить траекторию вычислений со всеми вариантами чисел
        # Чтобы понять как это будет работать - запустите пример в режиме отладки
        return f(in_num - 2, out_num) + f(in_num // 2, out_num)


# Выводим результат
# по условию задачи исходное число 38, результат 2 и трактория вычислений содержит число 16
print(f(38, 16) * f(16, 2))

Если бы в условии говорилось что траектория вычислений не должна содержать число 16: тогда условие if in_num < out_num заменили бы на if in_num < out_num or 16 == in_num:. И вызов функции бы был print(f(38, 2).

А так решение такое как в коде выше. И само собой если Исполнитель уменьшает число исходное то вызов рекурсии должен быть в условии, где исходное число больше результата и должно быть прописано всегда последним условием. И наоборот если увеличивает то меняем знак на противоположный в двух последних условиях.

Ответ: 36

Задача 7 (Демоверсия 2026)

Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:

A. Вычесть 1
B. Вычесть 4
C. Найти целую часть от деления на 3

Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 19 результатом является 2, при этом траектория вычислений не содержит числа 7 и содержит 13?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы СBА при исходном числе 22 траектория состоит из чисел 7, 3, 2.

Решение:
Решение на Python
def f(in_num, out_num):  # in_num исходное число, out_num результат
    if in_num == out_num:  # Если из исходного числа получился результат
        return 1
    if in_num < out_num or 7 == in_num:  # Если получилось исходное число больше результата или число 7
        return 0
    if in_num > out_num:  # Если исходное число больше результата продолжаем выполнять команды
        # Вызываем рекурсивно команды исполнителя, чтобы получить траекторию вычислений со всеми вариантами чисел
        # Чтобы понять как это будет работать - запустите пример в режиме отладки
        return f(in_num - 1, out_num) + f(in_num - 4, out_num) + f(in_num // 3, out_num)


# Выводим результат
# по условию задачи исходное число 19, результат 2 и трактория вычислений содержит число 13
print(f(19, 13) * f(13, 2))

Если бы в условии не говорилось, что траектория вычислений не должна содержать число 7: Тогда условие if in_num < out_num or 7 == in_num: заменили бы на if in_num < out_num: Если бы в условии не говорилось, что траектория вычислений должна содержать число 13, вызов функции бы был print(F(19, 2)). А так решение такое как код выше. И само собой если исполнитель уменьшает число исходное то вызов рекурсии должен быть в условии, где исходное число больше результата и должно быть прописано всегда последним условием. И наоборот если увеличивает то меняем знак на противоположный в двух последних условиях.

Ответ: 68

Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает. Для этого в ячейке с кодом нажмите клавиши на клавиатуре Shift+Enter или запустите код через кнопку Run по значку ▶.