Статья Автор: Деникина Н.В., Деникин А.В.

Задание 17: Единый шаблон решения

ЕГЭ-2024. Полный текст задачи, приведен на предыдущем шаге. Также можно решить ее здесь.

Выделим основные моменты в задаче.

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

1. Что искать в условии

Весь файл: максимальное трёхзначное число с окончанием 3.

Каждое окно: хотя бы одно такое число в тройке и сумма меньше опоры.

2. Как читать данные

Числа считываем построчно из прикреплённого 17_2024_demo.txt. Не сортируем: соседство должно сохраниться. 
Файл учебный и прикреплен внизу тетради. Откройте его, чтобы посмотреть данные.

Для оригинала нужен 17-408.txt. (см. оригинал)

3. Как найти опору

В учебном фрагменте подходят −153, −983 и 343; 1203 четырёхзначное.

Опора m = 343. Разрядность и окончание проверяем через abs(x), но максимум выбираем среди исходных чисел.

4. Как найти ответ

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


Полная программа на Python

Это вся программа, а не фрагмент. Запустите её на приложенном учебном файле, затем замените имя файла на оригинальное из задания.



Как читать проверку одного числа

int(100 <= abs(x) <= 999 and abs(x) % 10 == 3)

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

Часть проверкиЧто она означает
abs(x)Берём число без знака минус для проверки цифр.
100 <= abs(x) <= 999Число трёхзначное.
abs(x) % 10 == 3Последняя цифра равна 3.
andОба условия должны выполняться одновременно.
int(...)Превращаем результат True в 1, а False в 0.
xТрёхзначное?Окончание 3?int(...)
−153дада1
1203нетда0
−157данет0
343дада1
Зачем складывать? Для тройки −153, 14, −983 получим 1 + 0 + 1 = 2. Значит, два элемента обладают признаком, а условие «хотя бы один» выполняется: k >= 1.
Почему True и False можно складывать без int()

Любое сравнение в Python возвращает логическое значение: True («да») или False («нет»). При сложении Python использует True как 1, а False как 0.

True + False + True даёт 2 — два выполненных условия. False + False + True даёт 1.

В нашей тройке −153, 14, −983 проверки дают True, False, True. Их сумма равна 2, поэтому условие «хотя бы один» выполняется.

int(True) равно 1, а int(False) равно 0. Поэтому оба способа дают один ответ: можно складывать сами логические значения, а можно явно оборачивать каждое в int(...). В полной программе оставляем int(), чтобы подсчёт было легче читать.


Результат для учебного фрагмента: 4 325

В программе сначала найдено одно опорное значение по всему файлу, затем перебраны все соседние тройки. Числа в ответе относятся к приложенному короткому файлу, а не к исходному экзаменационному набору.

На экзамене скачай оригинальный TXT из задачи и замени только имя файла в первой строке чтения.

Attached files
17_2024_demo.txt
Печать