ex exxam.ru
Задания23 из 27
01 Графы: схема дорог и таблица расстояний 02 Логика: фрагмент таблицы истинности, порядок столбцов 03 Базы данных: поиск информации в связанных таблицах 04 Кодирование: условие Фано и двоичное дерево кода 05 Двоичная запись числа: алгоритм строит новое число 06 Исполнитель Черепаха: движение и подсчёт точек 07 Информационный объём: звук и изображения 08 Подсчёт слов: лексикографический список и перебор 09 Электронные таблицы: подсчёт строк по условию 10 Текстовый документ: поиск сочетаний букв по условию 11 Объём данных: мощность алфавита и кодирование 12 Исполнитель МТ (машина на ленте): чтение программы 13 IP-адреса и маски сетей TCP/IP 14 Арифметические выражения и системы счисления 15 Логика: истинность выражения с отрезками и предикатами 16 Рекурсивные функции: чтение и счёт по формулам 17 Обработка целочисленной информации: поиск пар в файле 18 Динамическое программирование: Робот-сборщик монет 19 Игры: выигрышная стратегия первым ходом (куча) 20 Игры: победа Пети своим вторым ходом (куча) 21 Игры: победа Вани первым или вторым ходом (куча) 22 Многопоточные вычисления: максимальное число одновременных процессов 23 Динамика: количество программ исполнителя текущее24 Обработка символьных строк: поиск подстроки по условию 25 Перебор чисел: делители и сумма M 26 Задание 26 нужны файлы27 Задание 27 нужны файлы
23
1 балл демоверсия ЕГЭ-2026

Динамика: количество программ исполнителя

Задание 23 · Билет 1 · ЕГЭ по информатике

Билет 1 — демоверсия ЕГЭ-2026; остальные билеты — задания в формате экзамена (открытый сборник или тренировочные по образцу). Это тренировочные материалы, а не официальные КИМ. Ответы пересчитаны и сверены.

Условие

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

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

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

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

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

Попробуйте программой

Необязательно, но удобно: напишите здесь свой код на Python, который найдёт ответ. Если не получится — откройте решение и вставьте готовую программу одной кнопкой.

Решите программой на Python

в браузере

Напишите свой код, который найдёт ответ, и нажмите «Выполнить». Горячая клавиша запуска: Ctrl/⌘ + Enter.

Результат
Здесь появится вывод print().

Разбор задачи

Задание 23 ЕГЭ по информатике — динамика: есть исполнитель с несколькими командами, которые меняют число, и нужно посчитать, сколько существует программ, переводящих стартовое число в конечное. Иногда часть чисел на траектории запрещена, а какое-то обязательно должно встретиться.

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

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

  • Задание повышенного уровня — оценивается в 1 балл
  • Ответ — одно целое число: количество подходящих программ
  • Команды увеличивают или уменьшают число, поэтому счёт ведут от цели к старту либо наоборот

План решения

  1. Перепишите команды исполнителя и определите, увеличивают они число или уменьшают.
  2. Отметьте ограничения: какие числа запрещены, какое число обязательно на траектории.
  3. Заведите — число программ, ведущих из к цели; запишите формулу перехода по командам.
  4. Считайте значения от цели к старту (или наоборот) и подставляйте их в формулу.
  5. Если есть обязательное число, перемножьте число путей на двух участках траектории.
Не знаешь, как решать?

Потренируйся считать программы: тренажёр соберёт нового исполнителя с командами и ограничениями, а вы посчитаете ответ программой на Python.

Открыть тренажёр

Решение

Теория с нуля: что нужно знать
1. Исполнитель с командами
Исполнитель превращает число на экране: например, A — вычесть 1, B — вычесть 4, C — взять целую часть от деления на 3. Программа — это последовательность команд, а траектория — все числа, которые получаются по ходу её выполнения.
2. Что считают
Спрашивают, сколько существует программ, переводящих стартовое число в конечное. Иногда на траекторию накладывают ограничения: какие-то числа запрещены, а какие-то обязательно должны встретиться.
3. Динамика
Команды уменьшают число, поэтому программы удобно считать «с конца», от цели к старту. — число программ, ведущих из в цель; оно равно сумме по всем числам, из которых одна команда приводит в . Для наших команд это (A), (B) и числа , , (C):
4. Пример: считаем «с конца»
Для цели 2: (программа уже в цели). Дальше , а (команда C из 5 даёт 1, а это ниже цели). Продвигаясь от малых чисел к большим, находят для стартового числа. Если команды увеличивают число (например, «+2» и «+10»), счёт ведут наоборот — от цели к меньшим числам.
5. Ограничения траектории
Запрещённое число обнуляет счёт: все программы, проходящие через него, не считаются — в динамике это число просто пропускают. Обязательное число делит путь на два участка: число программ, проходящих через него, равно произведению числа путей «старт → обязательное» и «обязательное → цель».

Решение

открыто шагов: 5 из 5
1 Шаг 1
Подход. Команды уменьшают число, поэтому считаем динамикой «с конца»: — число путей из к цели, оно равно сумме по числам, из которых одна команда приводит в (, и с ). Через запрещённое число 7 путей нет; обязательное 13 разбивает путь на два участка, и их количества перемножаются.
2 Шаг 2
Команды уменьшают число, поэтому считаем «с конца», от 2 вверх. Из числа можно прийти за одну команду из: (команда A), (команда B) и любого , у которого (команда C).
3 Шаг 3
Запрет: все пути через 7 обнуляем (в число 7 приходит 0 способов). Обязательное 13: количество = (число путей от 19 до 13 без запрещённых) × (число путей от 13 до 2 без запрещённых).
4 Шаг 4
Пути от 19 до 13 без «7»: например, 19 → 15 → 14 → 13 и 19 → 18 → 17 → 16 → 15 → 14 → 13 и т.д. После подсчёта отрезков и перемножения получаем общее число программ.
5 Шаг 5
Итого подходящих программ: 68.

Способ 1 · рекурсия с запоминанием

# Считаем динамикой «с конца»: f(x, goal) — число программ,
# переводящих x в goal и не проходящих через запрещённое число 7.
from functools import lru_cache

BAN = 7              # это число на траектории запрещено

@lru_cache(None)     # запоминаем уже посчитанные значения
def f(x, goal):
    if x == goal:                # цель достигнута — это одна программа
        return 1
    if x < goal or x == BAN:     # ниже цели или запрет — программ нет
        return 0
    # команды: A — вычесть 1, B — вычесть 4, C — взять целую часть от деления на 3
    return f(x - 1, goal) + f(x - 4, goal) + f(x // 3, goal)

# Обязательное число 13 делит путь на два участка: 19→13 и 13→2.
print(f(19, 13) * f(13, 2))

Способ 2 · обход чисел от старта вниз

# ways[x] — число программ, ведущих из старта a в число x.
# Все команды уменьшают число, поэтому идём от старта вниз.
BAN = 7

def count(a, b):
    ways = {a: 1}                 # из a в a ведёт одна (пустая) программа
    for x in range(a, b - 1, -1): # от старта к цели по убыванию
        if x == BAN or x not in ways:
            continue              # запрещённое число пропускаем
        for y in (x - 1, x - 4, x // 3):
            if y >= b:            # ниже цели уходить нельзя
                ways[y] = ways.get(y, 0) + ways[x]
    return ways.get(b, 0)         # сколько путей дошло до цели

# Обязательное 13: пути через него = (19→13) × (13→2).
print(count(19, 13) * count(13, 2))

Правильный ответ этого билета: 68
Проверка: динамика даёт 68 программ. Совпадает с эталоном демоверсии.

Проверка

Типовые ошибки и проверка
  • Путают направление: считают от 19 к 2, а не наоборот.
  • Забывают, что C — это целая часть от деления на 3 (деление с округлением вниз), а не остаток.
  • Не вычитают пути, проходящие через запрещённое число 7.
  • Считают «обязательное 13» как просто «встретилось где-то», не связывая с разбиением пути на две части.
  • Проверка: пересчитайте коротким перебором (все программы конечны) и сверьте с динамикой.

Режимы

Сейчас открыт режим обучения: теория, разбор и ответ видны. Скоро появится режим проверки — только условие и поле ответа, без подсказок.

Практикум Все задания Режим проверки — скоро

Частые вопросы

Что проверяет задание 23 ЕГЭ по информатике?
Умение считать количество программ исполнителя динамикой: по командам и ограничениям найти число способов перевести стартовое число в конечное.
Куда считать — от старта к цели или наоборот?
Это зависит от команд. Если команды уменьшают число, удобнее считать «с конца» — от цели к старту. Если увеличивают — от цели к меньшим числам или таблицей от старта к цели.
Как учитывать запрещённое число?
Все программы, проходящие через запрещённое число, не считаются. В динамике это число пропускают: число способов попасть в него не передаётся дальше.
Как учитывать обязательное число?
Обязательное число делит путь на два участка: старт → обязательное и обязательное → цель. Число программ через него равно произведению количеств путей на этих участках.
Можно ли решить задание 23 программой?
Да, на экзамене так и делают: короткая программа с рекурсией и запоминанием или таблицей считает ответ за секунды. В тренажёре можно написать её в песочнице Python.