ЕГЭ информатика 17 задание разбор, теория, как решать.
Полный разбор задания №17 ЕГЭ по информатике
Тип задания: Работа с файлами и последовательностями чисел.
В файле хранится последовательность целых или натуральных чисел.
Необходимо определить количество пар или троек подряд идущих элементов, которые удовлетворяют заданному условию,
а затем вычислить дополнительное значение (например, максимум, минимум или сумму).
Теория
1. Чтение чисел из файла
Данные в файле — это обычно список чисел, записанных друг под другом:
|
1 2 3 4 5 |
12 45 -7 89 ... |
Чтобы считать эти данные в Python, используем конструкцию:
|
1 2 |
a = [int(x) for x in open('17.txt')] |
Разбор:
open('17.txt')— открывает файл;- цикл
for x in open(...)перебирает строки из файла; int(x)— превращает каждую строку в число;[...]делает из этого список всех чисел файла.
После этого переменная a — это обычный список Python, например:
[12, 45, -7, 89, ...]
2. Просмотр элементов по парам
Чтобы пройтись по всем подряд идущим парам чисел (1-е со 2-м, 2-е с 3-м и т.д.), используется встроенная функция zip():
|
1 2 3 |
for x, y in zip(a, a[1:]): print(x, y) |
Как это работает:
a— исходный список;a[1:]— тот же список, но без первого элемента;zip(a, a[1:])создаёт пары (a[0], a[1]), (a[1], a[2]), (a[2], a[3]) и т.д.
Таким образом, цикл обходит все возможные пары подряд идущих чисел.
3. Просмотр элементов по тройкам
Если в задаче говорится «под тройкой понимаются три идущих подряд элемента последовательности»,
то используем zip() с тремя срезами:
|
1 2 3 |
for x, y, z in zip(a, a[1:], a[2:]): print(x, y, z) |
Теперь цикл перебирает (a[0], a[1], a[2]), затем (a[1], a[2], a[3]) и т.д.
4. Логические приёмы, которые часто встречаются
(x % 2 == 0)— число чётное;(10 <= x < 100)— двузначное;(1000 <= abs(x) < 10000)— четырёхзначное по модулю (учитываем отрицательные);(x < 0)— отрицательное;(x > 0)— положительное;(x % 10 == 7)— оканчивается на 7;abs(x) % 100 == 25— оканчивается на 25 (в том числе для отрицательных чисел);(x < 0) + (y < 0) == 1— ровно одно отрицательное число в паре;(10 <= x < 100) + (10 <= y < 100) == 1— ровно одно двузначное число.
5. Структура любого решения
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
a = [int(x) for x in open('17.txt')] # если нужно — найти опорное значение # m = min(x for x in a if ...) answer = [] for x, y in zip(a, a[1:]): # или zip(a, a[1:], a[2:]) if <условие 1> and <условие 2>: answer.append(x + y) # или x**2 + y**2, x*y, ... print(len(answer), max(answer)) # или min(...) |
📘 Это шаблон, к которому можно подставлять любые условия из задач.
Практические примеры
Пример 1. Демо ЕГЭ 2026
В файле содержится последовательность натуральных чисел.
Определите количество пар последовательности, в которых только один из элементов является двузначным числом, а сумма элементов пары кратна минимальному двузначному элементу последовательности.
В ответе запишите количество, затем наибольшую из сумм таких пар.
|
1 2 3 4 5 6 7 8 9 10 |
a = [int(x) for x in open('17.txt')] m = min(x for x in a if 10 <= x < 100) ans = [] for x, y in zip(a, a[1:]): if (10 <= x < 100) + (10 <= y < 100) == 1 and (x + y) % m == 0: ans.append(x + y) print(len(ans), max(ans)) |
Пример 2. Числа могут быть отрицательные
Определите количество пар, в которых элементы не равны, а абсолютное значение их разности делится на минимальный положительный элемент, кратный 35.
В ответ — количество и максимальная сумма.
|
1 2 3 4 5 6 7 8 9 10 |
a = [int(x) for x in open('17.txt')] m = min(x for x in a if x > 0 and x % 35 == 0) ans = [] for x, y in zip(a, a[1:]): if x != y and abs(x - y) % m == 0: ans.append(x + y) print(len(ans), max(ans)) |
Важно: используем abs(), так как могут быть отрицательные числа.
Пример 3. Пары с одним отрицательным
Найдите количество пар, в которых ровно одно число отрицательное, а сумма пары больше максимального отрицательного трёхзначного числа, кратного 6.
В ответе запишите количество и наибольшую сумму квадратов элементов таких пар.
|
1 2 3 4 5 6 7 8 9 10 |
a = [int(x) for x in open('17.txt')] m = max(x for x in a if x < 0 and len(str(abs(x))) == 3 and abs(x) % 6 == 0) ans = [] for x, y in zip(a, a[1:]): if (x < 0) + (y < 0) == 1 and (x + y) > m: ans.append(x**2 + y**2) print(len(ans), max(ans)) |
Пример 4. Тройки подряд (основная волна 2025)
Определите количество троек элементов последовательности, в которых не более двух из трёх элементов являются четырёхзначными числами, а сумма элементов тройки не больше максимального элемента последовательности, оканчивающегося на 25.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
a = [int(x) for x in open('17.txt')] mx = max(x for x in a if abs(x) % 100 == 25) ans = [] for x, y, z in zip(a, a[1:], a[2:]): cnt4 = (1000 <= abs(x) < 10000) + (1000 <= abs(y) < 10000) + (1000 <= abs(z) < 10000) s = x + y + z if cnt4 <= 2 and s <= mx: ans.append(s) print(len(ans), max(ans)) |
Пример 5. Все числа одного знака (ФИПИ-2025)
Определите количество троек, в которых все числа одного знака, а произведение максимального и минимального элементов тройки больше квадрата минимального трёхзначного числа последовательности, оканчивающегося на 15.
В ответ — количество и минимальное из таких произведений.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
a = [int(x) for x in open('17.txt')] mn = min(x for x in a if abs(x) % 100 == 15 and len(str(abs(x))) == 3) ans = [] for x, y, z in zip(a, a[1:], a[2:]): m1 = max(x, y, z) m2 = min(x, y, z) if (x > 0 and y > 0 and z > 0) or (x < 0 and y < 0 and z < 0): if m1 * m2 > mn**2: ans.append(m1 * m2) print(len(ans), min(ans)) |
Частые ошибки
- Использование
%безabs()при отрицательных числах; - Забывают закрыть условия скобками, например
if x<0 + y<0==1вместо(x<0)+(y<0)==1; - Неверный диапазон при подсчёте двузначных / трёхзначных чисел;
- Используют
min()илиmax()без условия фильтрации (возникает ошибка, если список пуст); - Путают «не более» (<=) и «ровно» (==).
Итог
Алгоритм решения любого задания №17 одинаковый:
- Считать список чисел;
- Определить дополнительный элемент (min/max с условием);
- Обойти пары или тройки с помощью
zip(); - Проверить условия задачи;
- Добавить подходящее значение в список;
- Вывести
len()иmax()/min()в зависимости от вопроса.
📗 Освоив этот шаблон, вы сможете решать все типы заданий №17 — из демоверсий, ФИПИ, СтатГрада и открытых сборников.