Задание 17 ЕГЭ по информатике: обработка числовой последовательности
Задание 17 ЕГЭ по информатике проверяет умение написать короткую программу, 10–15 строк, для обработки числовой последовательности из файла: нужно найти пары или тройки соседних чисел с заданными свойствами. В ответ записывают два числа — количество найденных пар и их наибольшую или наименьшую сумму.
- Что проверяет: Умение составить алгоритм обработки числовой последовательности и записать его в виде простой программы (10–15 строк) на языке программирования. Данные даны текстовым файлом, по одному числу в строке.
- Баллы: 1 первичный балл
- Формат ответа: Два целых числа через пробел: количество найденных пар или троек, затем наибольшая из их сумм
- Программа: задание решают программой
- Уровень сложности: повышенный
- Время: около 13 минут по спецификации
- Кодификатор: 3.10 — массивы и последовательности чисел; вычисление обобщённых характеристик элементов массива или числовой последовательности; требование 2.12 — умение реализовывать на выбранном языке программирования высокого уровня типовые алгоритмы обработки чисел, числовых последовательностей и массивов
Как решать
Прочитайте файл в список целых чисел: nums = [int(s) for s in open('17.txt')]. Сначала вычислите характеристику всей последовательности, которую упоминает условие: наименьший элемент, наибольшее число с заданным окончанием, среднее арифметическое. Только потом проходите по парам.
Пара в этом задании — два идущих подряд элемента, поэтому перебираются соседние индексы: for a, b in zip(nums, nums[1:]). Для троек удобен цикл по i от 0 до len(nums) - 3 и срез nums[i:i + 3].
Условия переводите в код по одному. «Ровно один из элементов делится на 9» — (a % 9 == 0) != (b % 9 == 0). «Хотя бы один» — or. «Число оканчивается на 21» — x % 100 == 21 для натуральных чисел. «Четырёхзначное» — 1000 <= x <= 9999, для отрицательных чисел сравнивайте abs(x).
Счётчик и максимум обновляйте в одном проходе. Максимум сумм начинайте с 0, если все суммы положительные, или с очень маленького числа, если в файле есть отрицательные. В ответ запишите два числа в порядке, указанном в условии.
Примеры с решением
Пример 1
Задание выполняется с использованием прилагаемого файла. В файле содержится последовательность натуральных чисел, каждое от 1 до 100 000 включительно.
Определите количество пар последовательности, в которых ровно один из двух элементов делится на 9, а сумма элементов пары меньше наибольшего элемента последовательности, запись которого оканчивается на 21. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар.
Парой считаются два соседних элемента последовательности.
Файл данных: 17_ex1.txt — 6000 строк, 34,4 КБ. Первые строки файла:
6565 68388 21706 88784 25661 57444 68948 65036
Решение на Python
nums = [int(s) for s in open('17_ex1.txt')]
limit = max(x for x in nums if x % 100 == 21) # наибольшее число, оканчивающееся на 21
count, best = 0, 0
for a, b in zip(nums, nums[1:]): # пары соседних элементов
if (a % 9 == 0) != (b % 9 == 0) and a + b < limit:
count += 1
best = max(best, a + b)
print(count, best)Ответ: 569 98378
Наибольшее число файла, которое оканчивается на 21, — 98 421. Программа проходит по 5999 соседним парам, оставляет пары, где на 9 делится ровно одно число, а сумма меньше 98 421, и находит 569 таких пар. Наибольшая сумма среди них — 98 378.
Пример 2
Задание выполняется с использованием прилагаемого файла. В файле содержится последовательность натуральных чисел, каждое от 1 до 100 000 включительно.
Определите количество троек последовательности, в которых ровно два элемента являются четырёхзначными числами, а сумма элементов тройки меньше среднего арифметического всех четырёхзначных элементов последовательности. В ответе запишите количество найденных троек, затем максимальную из сумм элементов таких троек.
Тройкой считаются три идущих подряд элемента последовательности.
Файл данных: 17_ex2.txt — 5000 строк, 23,3 КБ. Первые строки файла:
120 21117 6509 981 131 3279 810 525
Решение на Python
nums = [int(s) for s in open('17_ex2.txt')]
four = [x for x in nums if 1000 <= x <= 9999]
mean = sum(four) / len(four) # среднее четырёхзначных элементов
count, best = 0, 0
for i in range(len(nums) - 2):
t = nums[i:i + 3]
k = sum(1 for x in t if 1000 <= x <= 9999)
if k == 2 and sum(t) < mean:
count += 1
best = max(best, sum(t))
print(count, best)Ответ: 64 5463
В файле 5000 чисел, из них 2024 четырёхзначных, их среднее арифметическое примерно 5491,04. Сумма тройки с двумя четырёхзначными числами не меньше 2001, поэтому подходящих троек немного: программа находит 64. Наибольшая сумма среди них — 5463. Среднее хранится дробным числом: при целочисленном делении граница сдвинулась бы.
Типичные ошибки
- Перебирают все пары элементов, хотя в задании пара — это два идущих подряд числа.
- Вычисляют характеристику всей последовательности внутри цикла по парам: программа работает минуты вместо долей секунды.
- Считают среднее целочисленным делением и теряют дробную часть.
- Путают порядок чисел в ответе: сначала количество, затем сумма.
Потренироваться на тренажёре
Частые вопросы
Как открыть файл к заданию 17 в Python?
Сохраните файл в ту же папку, что и программу, и прочитайте его строкой `nums = [int(s) for s in open('имя_файла.txt')]`. Функция `int` сама отбрасывает перевод строки.
Что делать, если в файле есть отрицательные числа?
Остаток от деления отрицательного числа в Python неотрицательный: `-7 % 10` равно 3. Для условий на последнюю цифру используйте `abs(x) % 10`, а максимум сумм начинайте с очень маленького числа.
Официальные материалы
Другие задания
Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 16 и задание 18.
Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.