ЕГЭ по информатике 2025 все ближе и ребята, которые качественно готовятся, уже умеют решать практически любые задания. Однако решать на 80+ баллов пробники с типовыми задачами, которые по сути являются шаблонными, несложно. И совсем другое дело, когда встречаются задачи с изящными нюансами, как и на реальном ЕГЭ, что происходит ежегодно.
Об особенных формулировках на ЕГЭ по информатике 2024 рассказывал в отдельной статье.
Чтобы быть уверенным в результатах своих учеников у меня разработан цикл тренировочных работ, чтобы охватить максимально широкий спектр задач с различными формулировками, кот орые будут проверять разные умения и навыки выпускника. Проанализировав результаты прошедших пробников, могу выделить несколько задач, на которых "попались" даже многие из тех моих ребят, которые уже стабильно пишут тренировочные работы на 90-95 баллов.
КЕГЭ №9: условия не обязательно должны пересекаться
Самая часто встречающаяся формулировка в 9 задаче "для которых выполнены оба условия", то есть подразумевается использование логического оператора И при итоговой проверке в случае решения задачи в электронных таблицах, либо and при программное решении.
Однако, и в 9 и в 17 заданиях могут встречаться формулировки "хотя бы одно из условий", "ровно одно из условий", "не менее 2 условий" и .т.д. И в этом случае шаблоны, используемые при решении типовой задачи, могу привести к ошибке. Рассмотрим следующую задачу.
Тогда программа будет начинаться так:
Для того, чтобы проверить выполнение ровно одно условия будем использовать конструкцию:
if (условие 1) + (условие 2) + (условие 3) == 1.
Результатом проверки любого условия является True или False, то есть 1 или 0, так как по сути это ответ на вопрос "Данное условие выполняется? Да или нет?". Поэтому сложив 3 числа мы должны получить единицу, что будет означать, что два условия не выполнены (их результаты 0) и одно условие выполнено (его результат 1).
В строке восемь чисел, два числа повторяются, остальные различны, значит состав подходящий строки такой: 3 3 3 1 1 3 3 3. То есть список а3 будет содержать 6 чисел, а список а1 будет содержать 2 числа.
Проверка кратности относится ко всем числам в строке, поэтому используем список а.
Повторяющиеся числа находятся в списке а3, неповторяющиеся в списке а1, поэтому среднее арифметическое будем находить как отношение суммы чисел в соответствующем списке к их количеству.
Вроде бы все логично. Есть только одно НО ....
Здесь не все условия должны выполняться одновременно. Поэтому выполнение условия 3 не соотносится с выполнением условия 1.
То есть повторяющиеся числа - это не только числа, повторяющиеся 3 раза, а еще и числа повторяющиеся 2 или 4 раза! Может быть если строка 4 4 4 4 1 1 1 1 и она подойдет по первому условию, если строка 3 3 3 5 5 5 5 5 и она подойдет по второму условию и есть строка 3 3 3 3 3 3 1 1, которая подойдет по третьему условию. Так как выполняется ровно одно условие, то каждая из этих ситуаций возможна.
Тогда правильным будет создание дополнительного списка повторяющихся чисел и его использование при проверке условия номер 3.
Запоминаем:
- если требуется проверить соответствие всем условиям, то используем and / all
- если требуется проверить соответствие хотя бы одному условию, то используем or / any
- если требуется проверить соответствие ровно одному / хотя бы одному / ровно двум / не менее чем трем и т.п. условиям, то используем конструкции () + () + () / len.
КЕГЭ №12: слово «различных» должно стать триггером
На первый взгляд формулировка кажется абсолютно обычной, ведь условие легко записывается с помощью метода count.
Тогда решение будет выглядеть так.
Однако главный нюанс этой задачи в слове «различных». Если мы посмотрим, какие строки получаются после обработки указанным алгоритмом, то мы увидим, что результаты цикличны.
А значит мы многократно учитываем одни и те же строки. Поэтому важно запомнить правило: вижу слово «различных» – анализирую, могут ли быть дубликаты; если могут, использую «множество». Так как тип данных set хранит в себе только уникальные элементы.
Слово «различных» может встречаться во многих заданиях, не только №12. Однако на примере задачи №5 можно понять, что бессмысленное использование set при слове «различных» – это тоже плохо.
Если вопрос в пятой задаче звучит «при скольких различных N может получиться результат больше 134», то можно обойтись счетчиком или списком, потому что N мы перебираем в диапазоне, а там все числа уникальные. Использование множества в этом случае возможно, оно даст тоже правильный ответ, но смысла это не имеет, а мы же все-таки хотим быть сознательными кодерами, а не шаблонщиками.
Если вопрос в пятой задаче звучит «сколько различных R может получиться в результате работы алгоритма», то тут уже без множества не обойтись, потому что могут получаться числа-дубликаты.
Запоминаем:
- слово «различных» в условии задачи требует осмысления применяемых при программировании приемов
- ключевыми особенностями set является то, что там хранятся только уникальные элементы, причем хранятся неупорядоченно, то есть нельзя обратиться к элементу по его индексу
КЕГЭ № 17: абсолютное значение – это не просто написать abs
В контексте заданий № 17 из ЕГЭ по информатике модуль в основном используется в двух случаях:
- Проверка на что оканчивается число abs(a[i]) % 100 == 17, при условии, что элементы последовательности могут быть отрицательными.
- Проверка длины числа len(str(abs(a[i]))) == 4, при условии, что элементы последовательности могут быть отрицательными.
Но бывают интересные авторские формулировки, в которых бездумное использование модуля приведет к ошибке. Кстати, на ЕГЭ по информатике 2024 в каких-то регионах такая формулировка была, потому что я много проговаривал этот момент на июньском интенсиве, а потом после ЕГЭ один ученик мне сказал, что у него была ровно такая формулировка. Хотя в большинстве регионов прототип был другой.
Рассмотрим задачу c сайта kompege № 14257 (уровень: Средний).
(Л. Шастин) В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество троек элементов последовательности, в которых ровно два из трёх элементов оканчиваются на 12, а сумма элементов тройки не больше максимального элемента последовательности, которое является пятизначным числом и оканчивается на 7. В ответе запишите количество найденных троек чисел, затем абсолютное значение минимальной из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Быстрое ее решение может получиться таким:
Однако здесь кроится большой подвох. Мы добавляем в список только неотрицательные числа, потому что модуль стоит возле суммы. Представим, что у нас была подходящая тройка отрицательных элементов. Их сумма тоже получилась отрицательной.
Сумма 1 = - 1223
И была тройка подходящих положительных элементов:
Сумма 2 = 125
Если в список добавлять эти суммы, то про выполнении функции min, будет найдено число -1223, потому что оно меньше, чем 125, и это правильно.
В случае же, если мы будем добавлять в список взятые по модулю суммы, то число -1223 превратится в 1223 и при выполнении функции min результатом будет число 125.
Тогда получается, что нужно в список добавлять просто суммы подходящих троек, а модуль брать от найденного минимального значения, то есть в случае примера выше, ответ был бы 1223.
Правильное решение будет выглядеть так:
Запоминаем:
- формулировка «абсолютное значение» предполагает использование функции abs, причем как при программном решении, так и при решении с помощью электронных таблиц
- следует внимательно читать, к чему относится абсолютное значение
→ А в каких заданиях/формулировках чаще всего ошибаются ваши ученики?