(Иглин К.) Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел.
Определите сумму четных чисел в строке с наименьшим номером, для которой выполнены оба условия:
- в строке есть два числа, каждое из которых повторяется дважды, остальные числа различны;
- максимальное и минимальное значение в строке, не повторяется в ней.
В ответе запишите только число.
Решение с Counter
Шаг 1. Что такое Counter
from collections import Counter
s = [5, 8, 5, 12]
freq = Counter(s)
print(freq)
print('частота 5 =', freq[5])
📌 Counter из collections считает, сколько раз встречается каждое число. Counter([5, 8, 5, 12]) → Counter({5: 2, 8: 1, 12: 1}).
Шаг 2. Метод most_common() и список частот
from collections import Counter
s = [5, 8, 5, 5, 12]
c = Counter(s).most_common()
print(c)
print('самое частое:', c[0][0], 'раз:', c[0][1])
📌 most_common() отдаёт пары (число, частота) по убыванию частоты. Часто удобнее смотреть sorted(c.values()) — так проверяем схему «схема 2+2+1+1».
Шаг 3. Чтение строки
from collections import Counter
f = open('9.txt')
for line in f:
nums = list(map(int, line.split()))
print(nums, Counter(nums))
break
📌 Строка файла → список чисел; Counter(nums) сразу показывает частоты.
Шаг 4. Условие задачи
from collections import Counter
f = open('9.txt')
for line in f:
nums = list(map(int, line.split()))
c = Counter(nums)
print(nums, 'частоты=', sorted(c.values()))
break
📌 Проверяем частоты и второе условие задачи (для этой схемы: схема 2+2+1+1).
Шаг 5. Проверка условия и получение ответа
# Подключаем Counter и открываем файл 9.txt. Задаём best_evens
from collections import Counter
f = open('9.txt')
best_evens = 0
# Читаем строки: превращаем в список чисел
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
# Две пары + два уникальных; max и min встречаются по одному разу
c = Counter(nums)
if sorted(c.values()) != [1, 1, 2, 2]:
continue
mx, mn = max(nums), min(nums)
if c[mx] == 1 and c[mn] == 1:
best_evens = sum(x for x in nums if x % 2 == 0)
break
# Выводим best_evens. Жми RUN
print(best_evens)
Перебираем строки. Counter заменяет ручные count и списки s3/s2/s1: частоты в одном объекте, схему смотрим через sorted(c.values()).
📌 Ответ: 286.
Решение. Сначала проверим первое условие. В ячейку G1 введём формулу:
=СЧЁТЕСЛИ($A1:F1;A1)
и скопируем её во все ячейки диапазона G1:L40000.
В ячейку M1 введём признак «два числа по два раза, остальные два различны»:
=ЕСЛИ(И(СЧЁТЕСЛИ(G1:L1;2)=2;СЧЁТЕСЛИ(G1:L1;1)=2);1;0)
и скопируем формулу вниз до M40000.
Во втором условии максимум и минимум в строке не должны повторяться. В ячейку N1:
=ЕСЛИ(СЧЁТЕСЛИ($A1:F1;МАКС(A1:F1))=1;1;0)
В ячейку O1:
=ЕСЛИ(СЧЁТЕСЛИ($A1:F1;МИН(A1:F1))=1;1;0)
и скопируем обе формулы вниз до строки 40000.
В ячейку P1 объединим оба условия:
=ЕСЛИ(И(M1=1;N1=1;O1=1);1;0)
и скопируем вниз до P40000.
В столбце Q посчитаем сумму чётных чисел строки. В ячейку Q1 введём:
=СУММ(ЕСЛИ(ОСТАТ(A1;2)=0;A1;0);ЕСЛИ(ОСТАТ(B1;2)=0;B1;0);ЕСЛИ(ОСТАТ(C1;2)=0;C1;0);ЕСЛИ(ОСТАТ(D1;2)=0;D1;0);ЕСЛИ(ОСТАТ(E1;2)=0;E1;0);ЕСЛИ(ОСТАТ(F1;2)=0;F1;0))
и скопируем вниз до Q40000.
Включим фильтр по столбцу P, оставим только значение 1. Среди оставшихся строк найдём строку с наименьшим номером и возьмём сумму чётных чисел из столбца Q этой строки.
Получим ответ — 286.