Как решать задание 17 ЕГЭ по информатике (обработка чисел из файла)?
Задание 17 даёт файл с кучей целых чисел, и надо найти, например, количество пар с каким-то свойством и максимальную сумму. С чего начать чтение файла и как не запутаться в условиях? Как решать задание 17 на Python?
2 ответа
Задание 17 — обработка массива целых чисел из текстового файла. Классика: «найдите количество пар соседних элементов, удовлетворяющих условию, и максимальную сумму среди таких пар».
Шаблон решения:
with open('17.txt') as f:
a = [int(x) for x in f] # список всех чисел
count = 0
best = -10**18
for i in range(len(a) - 1): # пары соседних
x, y = a[i], a[i+1]
if (x % 3 == 0 or y % 3 == 0): # условие из задачи
count += 1
best = max(best, x + y)
print(count, best)
Ключевые моменты:
- читай числа в список через
int(x) for x in f; - «пары соседних» — это i и i+1, цикл до
len(a)-1; - одновременно копи и количество, и максимум/минимум, что просят.
Бывают варианты: пары не соседних, а отстоящих на k; тройки; элементы, кратные минимальному/максимальному в массиве. Метод тот же — точно перенеси условие в if.
Частые ошибки:
- начальное значение
best: для максимума ставь очень маленькое число, для минимума — очень большое; - выйти за границу массива (
len(a), а неlen(a)-1для пар) — будет ошибка индекса; - перепутать «соседних» и «любых двух».
Задание 17 — одно из самых выгодных: метод стандартный, главное — внимательность к условию.
Совет по инициализации: если ищешь максимальную сумму среди пар, которых может и не оказаться, начинай не с 0, а с заведомо маленького (-10**18) или с None и проверкой. Иначе для отрицательных чисел получишь неверный максимум, а 0 затешется ответом там, где подходящих пар нет.
И всегда выводи ровно то, что просят, в нужном порядке — обычно сначала количество, потом сумму, но перечитай условие.