Перейти к содержимому

Задание 13 ЕГЭ по информатике 2027: число программ исполнителя

Задание 13до 1 баллачисло программ исполнителя
Раздел
Алгоритмы и программирование
Максимальный балл
1 балл
Уровень
повышенный
Что проверяет
Умение анализировать ход исполнения алгоритма
Что нужно сделать
Посчитать, сколько существует программ исполнителя, которые переводят одно число в другое с заданными ограничениями.
Как записать ответ
только число: целое, без пробелов и единиц измерения
Время
Около 7 минут по обобщённому плану ФИПИ
Элемент кодификатора
3.3
Компьютер
Специальное ПО по плану ФИПИ не нужно: задание решают рассуждением, программа — для проверки
Файл к заданию
Нет — все данные в условии
В 2026 году
Это было задание 23

Задание 13 ЕГЭ по информатике 2027 года проверяет, по формулировке обобщённого плана ФИПИ, «умение анализировать ход исполнения алгоритма». Дан исполнитель с двумя или тремя командами, который преобразует число на экране; посчитать нужно, сколько существует различных программ, переводящих одно заданное число в другое. Иногда добавляется условие на траекторию вычислений: она обязана содержать заданное число или, наоборот, не содержать его.

Файл к заданию не прилагается, специализированное ПО по обобщённому плану не предусмотрено: все данные есть в условии, ответ — одно целое число. Уровень повышенный, 1 балл, около 7 минут по плану ФИПИ. Тема трудная: в 2026 году она была заданием 23, средний процент выполнения — 34,1, в 2025 году под тем же номером — 51,8.

В 2027 году тематика задания изменена: сюда перешла тема анализа хода исполнения алгоритма, а маска подсети стала базовым заданием 10.

Ниже — три типа задания с разбором и решением на Python, разбор демоверсии 2027 года и типичные ошибки.

Ищете задание 13 по нумерации 2026 года? Тогда под этим номером было другое задание — «маска подсети и IP-адрес». В КИМ 2027 года это задание 10.

Тренажёр задания 13

Десять заданий номера 13 из банка тренажёра — с файлами, как на станции КЕГЭ. Решайте в песочнице Python прямо на странице или у себя; ответ проверяется по ключу, после проверки — верный ответ, разбор и решение на Python, а при ошибке — разбор от ИИ. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.

Загружаем задание…

Задание 13 вместе с остальными — в вариантах целиком.

Типы задания 13 с решением

Команды «Прибавь 1» и «Поменяй местами»

Пример условия

Исполнитель преобразует число на экране. У него две команды: A. Прибавь 1; B. Поменяй местами — вторая применяется только к числу, у которого цифра в разряде десятков меньше цифры в разряде единиц, и заменяет две младшие цифры переставленными. Сколько существует программ, для которых при исходном числе 229 результатом является число 274?

Например, для программы ABA при исходном числе 18 траектория состоит из чисел 19, 91, 92.

1. Обе команды увеличивают число, поэтому считаем «сколько программ ведут из n в 274»: ways(274) = 1, а ways(n) = ways(n + 1) плюс, если команда B применима, ways(числа после перестановки). 2. Команда B работает при t < u, где t — цифра десятков, u — цифра единиц; после перестановки число равно n + 9 · (u − t). 3. Числа больше 274 не считаем: команды только увеличивают число, вернуться назад нельзя — такие вызовы дают 0. 4. Ответы запоминаем через lru_cache: без него одни числа пересчитываются многократно. 5. Последняя строка печатает ways(229).

На примере: в 274 ведут два перехода — командой A из 273 и командой B из 247, где переставляются цифры 4 и 7. Программ, приводящих из 229 в 273, — 14, в 247 — 2, поэтому ответ 14 + 2 = 16. Переходы за цель, например из 269 в 296, не считаются.

Решение на Python
from functools import lru_cache

START, TARGET = 229, 274


@lru_cache(maxsize=None)
def ways(n):
    # сколько программ ведут из числа n в TARGET
    if n == TARGET:
        return 1          # программа дошла до цели
    if n > TARGET:
        return 0          # обе команды увеличивают число, назад не вернуться
    total = ways(n + 1)   # команда A: прибавь 1
    tens, units = n // 10 % 10, n % 10
    if tens < units:      # команда B: поменяй местами
        total += ways(n + 9 * (units - tens))
    return total


print(ways(START))

Ответ: 16

Траектория содержит заданное число

Пример условия

Исполнитель преобразует число на экране. У него три команды: A. Вычесть 1; B. Вычесть 5; C. Найти целую часть от деления на 3. Сколько существует программ, для которых при исходном числе 31 результатом является число 10, при этом траектория вычислений содержит число 18?

Например, для программы ACC при исходном числе 59 траектория состоит из чисел 58, 19, 6.

1. Все команды уменьшают число, поэтому ways(n) считает программы из n в 10, не опускаясь ниже 10: ways(10) = 1, для чисел меньше 10 — 0. 2. Из n команды ведут в n − 1, n − 5 и n // 3; складываем ways по значениям не меньше 10. 3. Программа, проходящая через 18, делится по первому попаданию в 18 на части 31 → 18 и 18 → 10, поэтому нужное число программ — произведение. 4. Считаем count(31, 18) и count(18, 10) одной функцией и печатаем их произведение.

На примере: count(31, 18) = 20, count(18, 10) = 5, ответ 20 · 5 = 100. Без условия про 18 программ 31 → 10 было бы 187 — это неверный ответ.

Решение на Python
from functools import lru_cache


def count(start, finish):
    # сколько программ переводят start в finish командами -1, -5 и //3
    @lru_cache(maxsize=None)
    def ways(n):
        if n == finish:
            return 1
        if n < finish:
            return 0      # команды только уменьшают число, назад не вернуться
        total = 0
        for m in (n - 1, n - 5, n // 3):
            if m >= finish:
                total += ways(m)
        return total

    return ways(start)


# программа, проходящая через 18, делится на части 31 -> 18 и 18 -> 10
print(count(31, 18) * count(18, 10))

Ответ: 100

Траектория не содержит заданного числа

Пример условия

Исполнитель преобразует число на экране. У него три команды: A. Вычесть 1; B. Вычесть 4; C. Найти целую часть от деления на 3. Сколько существует программ, для которых при исходном числе 25 результатом является число 5, при этом траектория вычислений не содержит числа 8?

Например, для программы BAC при исходном числе 34 траектория состоит из чисел 30, 29, 9.

1. ways(n) — сколько программ ведут из n в 5, не заходя в 8: ways(5) = 1, ways(8) = 0, для чисел меньше 5 — тоже 0. 2. Из n команды ведут в n − 1, n − 4 и n // 3; складываем ways по значениям не меньше 5. 3. Переход в запретное число не считается вовсе: программы, попавшие в 8, выпадают из ответа целиком. 4. Ответы запоминаем через lru_cache; последняя строка печатает ways(25).

На примере: без запрета из 25 в 5 ведут 394 программы, через 8 проходят 133 из них, поэтому после запрета остаётся 394 − 133 = 261 — столько же даёт программа с запретом.

Решение на Python
from functools import lru_cache

START, TARGET, BAD = 25, 5, 8


@lru_cache(maxsize=None)
def ways(n):
    # сколько программ ведут из n в TARGET, не заходя в BAD
    if n == BAD:
        return 0      # программы, попавшие в запретное число, не считаем
    if n == TARGET:
        return 1
    if n < TARGET:
        return 0      # команды только уменьшают число
    total = 0
    for m in (n - 1, n - 4, n // 3):
        if m >= TARGET:
            total += ways(m)
    return total


print(ways(START))

Ответ: 261

Шаблон кода на Python

Число программ исполнителя

Рекурсия: из числа x в y ведёт столько программ, сколько ведёт из результатов каждой команды. Обязательная точка — произведение двух счётов, запрещённая — return 0.

Python
from functools import lru_cache

@lru_cache(None)
def ways(x, y):
    if x == y:
        return 1
    if x > y or x == 11:   # перелёт или запрещённое число
        return 0
    return ways(x + 1, y) + ways(x * 2, y)   # команды A и B

# от 2 до 20 через 8
print(ways(2, 8) * ways(8, 20))
Вывод
15

Шаблоны кода ко всем заданиям

Как выполнять задание

  1. Выпишите команды и условия применимости: «Поменяй местами» работает только тогда, когда цифра десятков меньше цифры единиц. Это первое, что переносят в код.
  2. Определите направление: команды только увеличивают число — программы считают по возрастанию, уменьшают — по убыванию. Переходы за результат не считайте: оттуда к цели не вернуться.
  3. Заведите массив или словарь: K[начало] = 1, K[n] — сколько программ приводит в n. Для каждого n прибавьте K[n] к числам, которые получаются из n одной командой.
  4. Если траектория обязана содержать число c, ответ — произведение числа программ начало → c и c → результат. Если число запрещено, переходы в него не считайте вовсе.
  5. Проверьте код на траектории из условия и впишите в поле ответа одно целое число без пробелов.

Что нужно знать

  • Динамика по числам. K(x) — сколько программ приводит исходное число в x; K(начало) = 1, а K(x) — сумма K(y) по y, из которых x получается одной командой.
  • Траектория и разбиение. Программа, проходящая через c, делится в c на две независимые части, поэтому число таких программ — произведение, а не сумма.
  • Запретное число. Достаточно не считать переходы в него: программы через запрет в ответ не войдут.
  • Перестановка двух младших цифр. Если t < u, где t — цифра десятков, а u — цифра единиц, число n переходит в n + 9 · (u − t): старшие разряды не меняются.
  • Целая часть от деления на 3 — это n // 3 в Python; все команды целочисленные, поэтому ответ целый.

Разобрать демоверсию целиком, с песочницей Python, можно на странице демоверсии КЕГЭ 2027.

Как оценивается

Проверка автоматическая, по ключу: ответ должен быть записан в форме из условия и полностью совпасть с эталоном. Код и черновики не проверяют — значение имеет только ответ. За верный ответ — 1 балл, частичного балла нет.

Критерии всех заданий экзамена — на странице критериев ЕГЭ.

Разбор задания демоверсии 2027

В демоверсии 2027 года у исполнителя команды A. Прибавь 1 и B. Поменяй местами; вторая применяется, только если цифра десятков меньше цифры единиц. Спрашивают, сколько программ переводят 100 в 141, ключ ФИПИ — 16.

Типовой пример из условия: программа ABA при исходном числе 13 даёт траекторию 14, 41, 42 — перестановка двух младших цифр увеличивает число. В 141 ведут ровно два перехода: командой A из 140 (программ 14) и командой B из 114, где переставляются цифры 1 и 4 (программ 2), поэтому 14 + 2 = 16.

Код из первого типа ниже написан для чисел 229 и 274; с числами 100 и 141 он тоже напечатает 16.

Типичные ошибки

Команда применена без проверки условия

Перестановка возможна, только если цифра десятков меньше цифры единиц. Если применять её к любому числу, появятся программы, которых исполнитель выполнить не может, и ответ вырастет.

Переставлены все цифры вместо двух младших

Команда меняет местами только разряды десятков и единиц: 247 переходит в 274, а не в 742. В коде это n + 9 * (units - tens), а не разворот записи числа.

Обязательное число: сумма вместо произведения

Программа, попавшая в обязательное число, обязана дойти до результата, поэтому части перемножаются. Сумма даёт завышенный ответ.

Неверно вычтены программы, проходящие через запретное число

Из общего числа вычитают все программы, проходящие через запрет: это произведение числа программ от начала до запретного числа и от запретного числа до результата, а не одна программа и не только те, где запрет стоит последним. Второй способ надёжнее — не считать переходы в запретное число вовсе, как в разборе третьего типа выше.

Вопросы и ответы

Как решать задание 13 ЕГЭ по информатике?

Обходом чисел в порядке, который задают команды. K[начальное число] = 1; для каждого числа к его соседям прибавляется K текущего числа. Если траектория обязана содержать c, ответ — произведение K(начало → c) и K(c → результат).

Нужно ли писать программу для задания 13?

Вручную считают только типовой пример из условия: программ бывают тысячи. Специализированное ПО для этого задания обобщённым планом ФИПИ не предусмотрено, но на станции есть среды программирования на C#, C++, Pascal, Java и Python.

Что было заданием 13 в 2026 году?

В КИМ 2026 года под номером 13 была маска подсети. В 2027 году эта тема стала базовым заданием 10, а на тринадцатое место перешла тема «Умение анализировать ход исполнения алгоритма», которая в 2026 году была заданием 23.

Какой шаблон кода подходит для задания 13?

Функция ways(n) с запоминанием ответов через lru_cache или массив dp, где dp[начало] = 1, а переходы соответствуют командам. Файл открывать не нужно: числа задаются в коде, ответ печатается одной строкой.

Другие задания раздела «Алгоритмы и программирование»

По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено:

Все задания ЕГЭ по информатике →