(Иглин К.) Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел.
Определите сумму четных чисел в строке с наименьшим номером, для которой выполнены оба условия:
- в строке есть два числа, каждое из которых повторяется дважды, остальные числа различны;
- максимальное и минимальное значение в строке, не повторяется в ней.
В ответе запишите только число.
Решение 1
Шаг 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. Числа с двумя и одним повторением
for s in open('9.txt'):
a = [int(x) for x in s.split()]
p2 = [x for x in a if a.count(x) == 2]
p1 = [x for x in a if a.count(x) == 1]
print('повторяются по 2:', p2)
print('уникальные:', p1)
break
📌 Результат: списки p2 (числа, встречающиеся дважды) и p1 (уникальные). В подходящей строке len(p2) == 4 и len(p1) == 2.
Шаг 4. Максимум и минимум среди уникальных
for s in open('9.txt'):
a = [int(x) for x in s.split()]
p2 = [x for x in a if a.count(x) == 2]
p1 = [x for x in a if a.count(x) == 1]
ok = len(p2) == 4 and len(p1) == 2
print('структура 4+2:', ok)
if ok:
print('max в уникальных:', max(a) in p1)
print('min в уникальных:', min(a) in p1)
break
📌 Результат: проверяем, что max(a) и min(a) входят в список p1 (не повторяются в строке).
Шаг 5. Проверка условия и получение ответа
# Открываем файл 9.txt и задаём best_evens.
f = open('9.txt')
best_evens = 0
# Читаем строки и проверяем схему повторов: две пары и два уникальных.
for line in f:
nums = list(map(int, line.split()))
values = set(nums)
if sorted(nums.count(x) for x in values) != [1, 1, 2, 2]:
continue
# Максимум и минимум должны встречаться по одному разу.
mx, mn = max(nums), min(nums)
if nums.count(mx) != 1 or nums.count(mn) != 1:
continue
# Считаем сумму чётных — первая подходящая строка и есть наименьший номер.
best_evens = sum(x for x in nums if x % 2 == 0)
break
# Выводим ответ.
print(best_evens)
Перебираем строки файла. Для первой подходящей строки выводим сумму чётных чисел и завершаем цикл — это ответ.
📌 Ответ: 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.