Решение задания № 9 ЕГЭ по информатике с помощью Python — универсальный и надёжный способ, который часто оказывается быстрее и удобнее, чем работа в электронных таблицах. Такой подход позволяет автоматизировать проверку условий и эффективно обрабатывать большие объёмы данных.
Термины, которые будем использовать: алгоритм, логические выражения, логические операторы.
Основной алгоритм решения
Решение любой задачи № 9 на Python строится по шаблону:
- Открыть файл с данными. Файл с исходной таблицей (обычно в формате .txt или .csv) поместить в ту же папку, где находится программа, чтобы открыть его командой open(‘9.txt’).
- Создать переменную, которая будет подсчитывать количество строк, удовлетворяющих условию, например count = 0.
- Использовать цикл for line in open(‘9.txt’):, чтобы пройтись по каждой строке файла, и с помощью split() разбить строку на отдельные элементы, а затем преобразовать каждый из них в целое число (int). Например: numbers = [int(x) for x in line.split()].
- Проанализировать числа строки a:
- Сортировка. Чтобы найти минимальное или максимальное значения, удобно использовать sorted(a), который вернёт новый отсортированный список.
- Подсчёт повторений. Метод a.count(x) покажет, сколько раз число x встречается в строке. Часто удобно разделить все числа на три группы:
- povtor3 = [x for x in a if a.count(x) == 3] — числа, которые встречаются трижды;
- povtor2 = [x for x in a if a.count(x) == 2] — числа, которые встречаются дважды;
- uniq = [x for x in a if a.count(x) == 1] — уникальные числа.
- Проверка на повторения. С помощью len(set(a)) можно узнать количество уникальных чисел. Если оно равно общему количеству чисел в строке (len(a)), значит, все числа различны.
- Сравнение исходного списка a с его отсортированной версией sorted(a). Если они равны, значит, числа расположены по возрастанию.
- Проверка на чётность. x % 2 == 0 вернёт True для чётного числа, а x % 2 != 0 — для нечётного.
- Составить логическое выражение с помощью операторов and и or, которое объединяет все условия из задания.
- Если условия для строки выполнены, увеличить счётчик (count += 1) либо добавить сумму чисел строки в список res.append(sum(a)).
- После завершения цикла вывести на экран нужное значение: количество строк (print(count)), сумму или номер строки.
Вот как перевести типичные условия из заданий в код на Python:
| Тип условия на русском языке | Реализация на Python (синтаксис) |
|---|---|
| Самое большое число меньше суммы трёх остальных | max(a) < sum(a) − max(a) |
| Все числа различны | len(set(a)) == len(a) |
| Числа расположены по возрастанию | a == sorted(a) |
| Одно число повторяется трижды, остальные различны | len(povtor3) == 3 and len(uniq) == 3 |
| Количество чётных и нечётных чисел одинаково | len([x for x in a if x%2==0]) == len([x for x in a if x%2!=0]) |
| Любое число повторяется от двух до трёх раз | a.count(x) in (2, 3) (для конкретного x) |
| Среднее арифметическое уникальных чисел меньше повторяющегося | sum(uniq)/len(uniq) < povtor3[0] |
Практикум
Применим наш алгоритм к решению реальных задач из ЕГЭ.
Задание 1
Откройте файл электронной таблицы 9_1.xlsx, которая содержит в каждой строке семь натуральных чисел. Определите сумму всех чисел в строке таблицы с наименьшим номером, для чисел которой выполнены оба условия:
- в строке есть два числа, каждое из которых повторяется дважды, остальные три числа различны;
- максимальное число строки не повторяется.
В ответе запишите только число.
Создаём список, который показывает, сколько раз встречается каждое число в строке. Если в нём три раза встречается 1 и четыре раза — 2, это значит, что в строке есть три уникальных числа и два числа, повторяющихся по два раза.
Затем проверяем второе условие: максимальное число должно встречаться ровно один раз. Поскольку требуется найти строку с наименьшим номером, при первом подходящем варианте сразу выводим сумму чисел и прерываем цикл с помощью break.
f = open(‘9.txt’)
for s in f:
a = [int(x) for x in s.split()]
povt = [a.count(x) for x in a]
# Проверяем: два числа встречаются дважды (всего четыре двойки в povt),
# и три числа встречаются один раз (всего три единицы в povt)
if povt.count(2) == 4 and povt.count(1) == 3:
# Проверяем, что максимальное число встречается ровно один раз
if a.count(max(a)) == 1:
print(sum(a))
break
f.close()
Ответ: 261.
Задание 2
Откройте файл электронной таблицы 9_2.xlsx, которая содержит в каждой строке четыре натуральных числа. Рассматриваются строки, которые соответствуют условиям:
- максимальное число меньше суммы оставшихся трёх чисел;
- суммы пар чисел не равны друг другу.
В ответе укажите номер последней подходящей строки.
Для проверки третьего условия можно пойти двумя путями: перебрать все пары чисел или отсортировать список a. Во втором случае достаточно сравнить суммы: если сумма минимального и максимального элементов не равна сумме двух оставшихся, условие выполняется.
Так как требуется найти номер последней подходящей строки, введём два счётчика: ns — номер текущей строки (увеличивается на каждой итерации) и maxns — номер последней строки, удовлетворяющей условиям. При выполнении условия будем обновлять maxns.
f = open(‘9.txt’)
ns, maxns = 0, 0
for s in f:
ns += 1
a = [int(x) for x in s.split()]
if max(a) < (sum(a) — max(a)):
a.sort()
if a[0] + a[3] != a[1] + a[2]:
maxns = max(maxns, ns)
print(maxns)
f.close()
Ответ: 3200.
Задание 3
Откройте файл электронной таблицы 9_2.xlsx, которая содержит в каждой строке четыре натуральных числа. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
- наибольшее из четырёх чисел меньше суммы оставшихся трёх чисел;
- среди четырёх чисел есть только одна пара равных чисел.
В ответе укажите количество подходящих четвёрок.
Чтобы среди четырёх чисел была ровно одна пара одинаковых, достаточно проверить, что количество различных значений равно трём.
Есть и альтернативный способ — создать массив с помощью генератора списков, в который мы запишем количество повторений каждой из цифр. Если в этом списке число 2 встречается два раза, значит, ровно одно число повторяется дважды, и условие выполнено.
f = open(‘9.txt’)
k = 0
for s in f:
a = [int(x) for x in s.split()]
if max(a) < (sum(a) — max(a)):
povt = [a.count(x) for x in a] # Массив: сколько раз встретилось каждое число в строке
if povt.count(2) == 2: # Только одно число встречается дважды
k += 1
print(k)
f.close()
Ответ: 133.
Заключение
Теперь ты умеешь переводить условия задач из таблиц в логические выражения на Python и обрабатывать данные построчно. Ты знаешь основные приёмы: подсчёт повторений, проверку уникальности, сортировку и объединение условий с помощью and и or. Это позволит уверенно решать задания № 9 ЕГЭ — находить нужные строки, считать их количество и определять их номера.