Задание 17 ЕГЭ по информатике: обработка числовой последовательности

Задание 17 ЕГЭ по информатике проверяет умение написать короткую программу, 10–15 строк, для обработки числовой последовательности из файла: нужно найти пары или тройки соседних чисел с заданными свойствами. В ответ записывают два числа — количество найденных пар и их наибольшую или наименьшую сумму.

Как решать

Прочитайте файл в список целых чисел: 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 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.