ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Электронные таблицы и формулы.
| КЭС: | 4.2 Анализ данных с помощью электронных таблиц. Вычисление суммы, среднего арифметического, наибольшего (наименьшего) значения диапазона. Вычисление коэффициента корреляции двух рядов данных. Построение столбчатых, линейчатых и круговых диаграмм. Построение графиков функций. Подбор линии тренда, решение задач прогнозирования. Решение задач оптимизации с помощью электронных таблиц |
| Тип ответа: | Краткий ответ |
Ответ: 17
Решение.
В приложенном файле 16000 строк по 7 натуральных чисел; первая строка уже содержит данные. Проверяем строки независимо и сохраняем их исходную нумерацию.
Требуется ровно пять различных значений: два встречаются по два раза, три — по одному. Отсортированный список частот равен [1, 1, 1, 2, 2]. Только после этой проверки рассматриваем второе условие.
Пусть R — сумма всех четырёх ячеек с повторяющимися значениями, U — сумма трёх неповторяющихся. Повторяющиеся числа включаем в R с обоими вхождениями.
Среднее повторяющихся должно быть меньше максимального среди неповторяющихся. Обозначим этот максимум M. Проверяем R4 < M, то есть R < 4M.
Нужен номер первой подходящей строки. Строки обрабатываем в исходном порядке сверху вниз; сортировать всю таблицу нельзя. Сортировка чисел внутри одной строки её номер не меняет.
Для воспроизводимого подсчёта сохраним заполненный лист как текст с разделителями табуляции под именем data.txt в кодировке UTF-8. Заголовок добавлять не нужно. При экспорте должны сохраниться все 16000 строк и все 7 чисел каждой строки. Метод split() разбирает как табуляции, так и пробелы.
Следующая программа проверяет оба требования для каждой строки:
from collections import Counter
answer = 0
with open("data.txt", encoding="utf-8-sig") as f:
for number, line in enumerate(f, 1):
a = sorted(map(int, line.split()))
c = Counter(a)
single = [x for x in a if c[x] == 1]
repeat = [x for x in a if c[x] > 1]
ok = (sorted(c.values()) == [1, 1, 1, 2, 2] and sum(repeat) < 4 * max(single))
if ok:
answer = number
break
print(answer)Counter хранит частоту каждого значения. Оператор and означает одновременное выполнение условий; если проверка частот не прошла, второе выражение не вычисляется.
Первая подходящая строка имеет номер 17. Все предыдущие 16 строк проверены и не удовлетворяют хотя бы одному условию. Всего подходящих строк 131, но в ответ требуется именно первый номер.
Контроль нескольких найденных строк:
| Номер строки | Значения |
|---|---|
| 17 | 74, 67, 67, 40, 40, 76, 96 |
| 43 | 83, 65, 41, 97, 97, 41, 46 |
| 48 | 22, 59, 52, 41, 82, 52, 41 |
| 15598 | 82, 22, 22, 21, 94, 46, 82 |
| 15908 | 49, 68, 38, 68, 85, 38, 98 |
Например, строка 17: Частоты значений равны [1, 1, 1, 2, 2]; неповторяющиеся: [74, 76, 96], повторяющиеся с учётом всех вхождений: [40, 40, 67, 67]. Их суммы U = 246, R = 214. R = 214 < 4M = 384.
Проверка выполнена также по исходному XLSX: независимый алгоритм подсчёта частот совпал по всем выбранным номерам строк.
Ответ: 17.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF16B528.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.