23 задание ЕГЭ информатика: как решать, код и таблица
В задании № 23 нужно посчитать, сколько существует программ, которые переводят начальное число в конечное, часто с условием на траекторию: через число проходить обязательно или нельзя. Решается оно динамическим подсчётом: для каждого числа записываешь, сколькими способами до него можно дойти, и складываешь. Ниже шаблон решения руками, в Excel и на Python, типичные ошибки и способ проверки.
Что проверяет задание № 23
Задание относится к блоку анализа хода исполнения алгоритма и считается заданием высокого уровня. Ответ — одно целое число. Есть исполнитель с двумя-тремя командами (прибавь число, умножь на число и подобные), начальное число и конечное. Нужно найти количество разных программ, то есть последовательностей команд.
Две программы считаются разными, если различаются последовательностью команд, даже если промежуточные числа похожи. Траектория — это все числа, которые появляются на экране по ходу программы, включая начальное и конечное. Условия бывают такие: траектория содержит число A, траектория содержит A и B, траектория не содержит число C.
Состав команд и формулировки могут меняться от варианта к варианту: где-то встречаются команды, которые меняют цифру числа или переставляют цифры местами. Принцип остаётся прежним, меняется только то, как из одного числа получается другое. Актуальный формат и примеры смотри в демоверсии и кодификаторе на сайте ФИПИ (fipi.ru).
23 задание ЕГЭ по информатике: как решать, общий алгоритм
Идея: количество способов дойти до числа n равно сумме количеств способов дойти до тех чисел, из которых n получается одной командой. Это динамическое программирование, и оно работает одинаково руками, в таблице и в коде.
- Выпиши команды и определи, из каких чисел можно прийти в n. Для команд «прибавь 1» и «умножь на 2» это n-1 и n/2 (если n чётно).
- Для начального числа поставь 1: пустая программа — один способ дойти до него.
- Иди от начального числа к конечному по возрастанию и для каждого n складывай значения предшественников.
- Если число запрещено условием «не содержит», поставь для него 0 и не используй дальше.
- Если траектория должна содержать число A, раздели задачу: способов дойти от начала до A умножь на число способов дойти от A до конца.
- Если нужно пройти через A и B, перемножай три участка: начало → A, A → B, B → конец.
Пример задания из банка «Ранга»
Пример ниже — типичное условие с обязательным числом в траектории. Разбей его на два участка и проверь по шаблону выше, а потом сверься с ответом.
Условие. Исполнитель Калькулятор преобразует число на экране. У него две команды:
1) прибавь 1
2) умножь на 2
Сколько существует программ, которые преобразуют число 3 в число 40, причём траектория вычислений содержит число 19 (траектория — это последовательность всех чисел, появляющихся на экране)? В ответе запиши только целое число.
Показать ответ и решение
- Число программ считают по числам: в каждое число можно прийти прибавлением единицы или удвоением. Требование пройти через промежуточное число режет задачу на две независимые части, результаты которых перемножаются.
- Посчитай отдельно число путей от начального числа до промежуточного.
Ответ: 42
23 задание ЕГЭ по информатике руками: таблица значений
Решение руками надёжно, когда числа небольшие. Нарисуй строку чисел от начального до конечного и под каждым запиши количество способов. Для примера с командами «прибавь 1» и «умножь на 2» значение для нечётного n равно значению для n-1, а для чётного — сумме значений для n-1 и n/2.
Если в условии есть обязательное число, считай два отдельных участка и не пытайся вести одну таблицу через всю траекторию. Второй участок начинай заново: в числе A снова ставь 1. Это самая частая точка ошибки: ученики продолжают складывать накопленные значения и получают завышенный ответ.
Для условия «не содержит» не вычёркивай число из строки, а ставь в него 0. Тогда формула для следующих чисел работает без исключений.
23 задание ЕГЭ по информатике на Python: код и шаблон
На компьютерном экзамене код обычно быстрее и надёжнее ручного счёта. Шаблон с рекурсией и кэшем для команд «прибавь 1» и «умножь на 2»:
from functools import lru_cache @lru_cache(None) def f(a, b): if a > b: return 0 if a == b: return 1 return f(a + 1, b) + f(a * 2, b) print(f(3, 19) * f(19, 40))
Здесь f(a, b) возвращает число программ из a в b. Если a превысило b, программа не подходит, если равно — найден один способ. Последняя строка реализует условие «траектория содержит 19»: произведение числа способов на двух участках.
Для условия «не содержит» добавь в начало функции проверку: если a равно запрещённому числу, верни 0. Для других команд (например, изменить цифру или поменять цифры местами) меняются только два последних слагаемых: на каждую команду приходится одно слагаемое f(новое_число, b). Следи, чтобы новое число не выходило за границу и рекурсия не уходила в бесконечность.
23 задание ЕГЭ по информатике в Excel
Таблица подходит, когда команд мало и числа идут подряд. В первом столбце запиши числа от начального до конечного, во втором — формулу количества способов. Для начального числа поставь 1. Для остальных строк сложи значения из строк, откуда можно прийти, с помощью ЕСЛИ и ЦЕЛОЕ: например, добавляй значение из строки n/2 только если n чётно.
Для запрещённого числа в ячейку вручную введи 0. Для обязательного числа сделай второй столбец, где в этом числе снова стоит 1, и перемножь итоги двух участков. Минус Excel — неудобство, когда числа перескакивают через большие промежутки: там рекурсия на Python проще.
Типичные ошибки и самопроверка
Проверь решение на маленьком примере, который можно пересчитать в уме: например, сколько программ ведёт из 1 в 4 с теми же командами. Если код выдаёт то же, что и ручной подсчёт, шаблон верен.
- Забыл, что начальное число даёт 1, а не 0.
- Не обнулил участок после обязательного числа и сложил значения вместо умножения участков.
- Включил запрещённое число в траекторию или проверил его только в конце.
- Не учёл, что умножение на 2 даёт только чётные числа, и взял n/2 для нечётного n.
- Перепутал порядок: считал от конца к началу без смены формулы.
- Не заметил, что конечное число совпадает с обязательным или запрещённым.
Частые вопросы
Как быстро решать 23 задание ЕГЭ по информатике?
Держи под рукой рекурсивный шаблон на Python и меняй в нём только команды и условия. Перед этим один раз разбери ручную таблицу, чтобы понимать, откуда берутся слагаемые. На экзамене проверь код на маленьком примере.
Что делать, если в условии «траектория не содержит» число?
Добавь в функцию проверку на запрещённое число и возвращай для него 0. Тогда любые пути через это число обнулятся сами. В ручной таблице просто поставь 0 в соответствующую клетку.
Что делать, если среди команд есть изменение цифры или перестановка цифр?
Формула остаётся той же: количество способов дойти до числа равно сумме по всем командам. Для каждой команды напиши, как получается новое число, и добавь вызов функции для него. Следи, чтобы число не выходило за границы условия.
Что нового в задании № 23 в текущем году?
Формат и формулировки уточняй в демоверсии и кодификаторе на сайте ФИПИ: там публикуют актуальные изменения. Не опирайся на пересказы, сравнивай с официальным документом.
Где потренироваться в таких заданиях?
Начни с заданий из открытых вариантов и банка заданий, а затем решай новые без подсказок. Можно взять тренажёр «Ранга» с проверкой ответа или пройти бесплатный тест и увидеть, где теряются ошибки.
Полезно по теме
Читать дальше
Проверить себя в тренажёре
Открывается тренировочное задание в формате ЕГЭ: условие видно сразу, краткий ответ проверяется без регистрации.
Решить задание в тренажёреМатериал — разъяснение «Ранг». Официальные правила экзамена, расписание, шкалы баллов и перечни заданий публикуют ФИПИ (fipi.ru) и Рособрнадзор (obrnadzor.gov.ru). Мы не обещаем конкретных баллов: результат зависит от твоей работы.