Определите сумму четных чисел в строке с наименьшим номером, для которой выполнены оба условия:
Решение 1. Counter
Шаг 1. Чтение строк файла и нумерация
f = open('9.txt')
for i, line in enumerate(f, start=1):
print(i, line)
break
📌 Результат: для каждой строки получаем её номер и содержимое (на примере первой строки).
Шаг 2. Преобразование строки в список чисел
f = open('9.txt')
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
print(i, nums)
break
📌 Результат: строка превращается в список целых чисел, например [3, 7, 10, 2, 6].
Шаг 3. Структура повторов в строке
f = open('9.txt')
from collections import Counter
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
c = Counter(nums)
print(i, nums, sorted(c.values()))
break
📌 Результат: для строки из шести чисел в подходящем случае sorted(c.values()) == [1, 1, 2, 2] (два числа встречаются по два раза, два числа — по одному).
Шаг 4. Максимум и минимум не повторяются
f = open('9.txt')
from collections import Counter
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
c = Counter(nums)
if sorted(c.values()) != [1, 1, 2, 2]:
print(i, '— структура повторов не подходит')
break
mx, mn = max(nums), min(nums)
print(i, 'max =', mx, 'count(max) =', c[mx])
print(i, 'min =', mn, 'count(min) =', c[mn])
break
📌 Результат: у максимального и минимального значения в строке счётчик должен быть равен 1.
Шаг 5. Проверка условия и получение ответа
f = open('9.txt')
from collections import Counter
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
c = Counter(nums)
if sorted(c.values()) != [1, 1, 2, 2]:
continue
mx, mn = max(nums), min(nums)
if c[mx] != 1 or c[mn] != 1:
continue
evens = sum(x for x in nums if x % 2 == 0)
print(evens)
break
Перебираем строки по порядку. Для первой строки, где выполнены оба условия, считаем сумму чётных чисел и выводим её — это ответ.
📌 Ответ: 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.