Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел.
Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:
- в строке одно число повторяется трижды, остальные четыре числа различны;
- среднее арифметическое неповторяющихся чисел строки больше её повторяющего числа.
В ответе запишите только число.
Решение на 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
max_num = 0
# перебираем строки файла
for i, line in enumerate(f, start=1):
nums = list(map(int, line.split()))
# считаем количество каждого числа
c = Counter(nums)
# число, которое встречается 3 раза
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]:
max_num = i
print(max_num)
Среди подходящих строк запоминаем наибольший номер строки.
📌 Ответ: 13609.
Решение. Сначала проверим первое условие. В ячейку H1 введём формулу:
=СЧЁТЕСЛИ($A1:G1;A1)
и скопируем эту формулу во все оставшиеся ячейки диапазона H1:N16000.
В ячейку O1 введем формулу:
=ЕСЛИ(И(СЧЁТЕСЛИ(H1:N1;3)=1;СЧЁТЕСЛИ(H1:N1;1)=6);1;0)
и скопируем эту формулу во все оставшиеся ячейки диапазона O2:O16000. Если в строке одно число повторяется трижды, а остальные 6 чисел различны, в ячейке O будет стоять 1, иначе 0.
Для проверки второго условия в ячейку P1 введем формулу:
=ЕСЛИ(H1=3;A1;"")
и скопируем эту формулу в ячейки диапазона P1:V116000. В данном диапазоне останутся только повторяющиеся трижды числа.
В ячейку W1 введем формулу:
=СУММ(P1:V1)/3
и скопируем эту формулу во все оставшиеся ячейки диапазона W2:W16000. В этом столбце будет число, повторяющееся трижды.
В ячейку X1 введем формулу:
=(СУММ(A1:G1)-W1*3)/6
и скопируем эту формулу во все оставшиеся ячейки диапазона X2:X16000. В этом столбце будет среднее арифметическое неповторяющихся чисел (для строк без тройного повтора формула не важна — такие строки уже отсеяны первым условием).
Проверим строки, подходящие под оба условия. Для этого в ячейку Y1 введем формулу:
=ЕСЛИ(И(O1=1;W1>X1);1;0)
и скопируем эту формулу во все оставшиеся ячейки диапазона Y2:Y16000.
Включим фильтр по столбцу Y, оставим значение только 1. Наибольший номер строки таблицы, для которой выполнены оба условия, даёт ответ.
Наибольший номер строки, для которой выполнены оба условия: 13609.
В ответе запишите только число — 13609.