Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел.
Определите сумму чисел в строке с наибольшим номером, для которой выполнены оба условия:
- в строке есть одно число, которое повторяется трижды, остальные четыре числа различны;
- среднее арифметическое неповторяющихся чисел строки не больше повторяющегося числа.
В ответе запишите только число.
Решение на Python
Шаг 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)
triple = [x for x in c if c[x] == 3]
unique = [x for x in c if c[x] == 1]
print(i, 'тройка:', triple, 'уникальные:', unique)
break
📌 Результат: в строке одно число встречается 3 раза, остальные 4 числа встречаются по 1 разу.
Шаг 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)
triple = [x for x in c if c[x] == 3]
unique = [x for x in c if c[x] == 1]
if len(triple) == 1 and len(unique) == 4:
avg = sum(unique) / 4
print('среднее уникальных =', avg, 'тройка =', triple[0])
if avg <= triple[0]:
print('подходит')
break
📌 Результат: проверяем, что среднее неповторяющихся не больше числа, повторяющегося трижды.
Шаг 5. Проверка условия и получение ответа
f = open('9.txt')
from collections import Counter
best_i = 0
best_sum = 0
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
c = Counter(nums)
triple = [x for x in c if c[x] == 3]
unique = [x for x in c if c[x] == 1]
if len(triple) == 1 and len(unique) == 4:
avg = sum(unique) / 4
if avg <= triple[0]:
best_i = i
best_sum = sum(nums)
print(best_sum)
Среди подходящих строк выбираем строку с наибольшим номером и выводим сумму чисел в этой строке.
📌 Ответ: 901.
Решение. Сначала проверим первое условие. В ячейку H1 введём формулу:
=СЧЁТЕСЛИ($A1:G1;A1)
и скопируем эту формулу во все оставшиеся ячейки диапазона H1:N42000.
В ячейку O1 введем формулу:
=ЕСЛИ(И(СЧЁТЕСЛИ(H1:N1;3)=1;СЧЁТЕСЛИ(H1:N1;1)=6);1;0)
и скопируем эту формулу во все оставшиеся ячейки диапазона O2:O42000. Если в строке одно число повторяется трижды, а остальные 6 чисел различны, в ячейке O будет стоять 1, иначе 0.
Для проверки второго условия в ячейку P1 введем формулу:
=ЕСЛИ(H1=3;A1;"")
и скопируем эту формулу в ячейки диапазона P1:V142000. В данном диапазоне останутся только повторяющиеся трижды числа.
В ячейку W1 введем формулу:
=СУММ(P1:V1)/3
и скопируем эту формулу во все оставшиеся ячейки диапазона W2:W42000. В этом столбце будет число, повторяющееся трижды.
В ячейку X1 введем формулу:
=(СУММ(A1:G1)-W1*3)/6
и скопируем эту формулу во все оставшиеся ячейки диапазона X2:X42000. В этом столбце будет среднее арифметическое неповторяющихся чисел (для строк без тройного повтора формула не важна — такие строки уже отсеяны первым условием).
Проверим строки, подходящие под оба условия. Для этого в ячейку Y1 введем формулу:
=ЕСЛИ(И(O1=1;W1<=X1);1;0)
и скопируем эту формулу во все оставшиеся ячейки диапазона Y2:Y42000.
Включим фильтр по столбцу Y, оставим значение только 1. В отфильтрованной строке с наибольшим номером найдём сумму чисел в столбцах A–G (формула =СУММ(A1:G1) для этой строки).
Получим ответ — 901.