ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Самостоятельное написание алгоритма.
Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования; Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.
| КЭС: | 3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность 3.3 Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат 3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования 4.1 Анализ данных. Основные задачи анализа данных: прогнозирование, классификация, кластеризация, анализ отклонений. Последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и/или построение модели, преобразование данных, визуализация данных, интерпретация результатов. Программные средства и интернет-сервисы для обработки и представления данных. Большие данные. Машинное обучение 4.2 Анализ данных с помощью электронных таблиц. Вычисление суммы, среднего арифметического, наибольшего (наименьшего) значения диапазона. Вычисление коэффициента корреляции двух рядов данных. Построение столбчатых, линейчатых и круговых диаграмм. Построение графиков функций. Подбор линии тренда, решение задач прогнозирования. Решение задач оптимизации с помощью электронных таблиц 4.3 Дискретизация при математическом моделировании непрерывных процессов. Моделирование движения. Моделирование биологических систем. Математические модели в экономике. Вычислительные эксперименты с моделями. Обработка результатов эксперимента. Метод наименьших квадратов. Оценка числовых параметров моделируемых объектов и процессов. Восстановление зависимостей по результатам эксперимента 4.4 Вероятностные модели. Методы Монте-Карло. Имитационное моделирование. Системы массового обслуживания |
| Тип ответа: | Развернутый ответ |
Ответ: Программа на Python 3 приведена в решении
Решение.
Язык: Python 3. У каждого ученика ровно три оценки. Сравнение средних баллов равносильно сравнению сумм: деление всех сумм на одно и то же положительное число 3 не меняет порядок и равенства. Поэтому вещественные числа не нужны.
Для каждого ученика сохраняем сумму трёх оценок, фамилию и имя. Затем сортируем все суммы по убыванию, сохраняя повторения, и берём третью сумму — элемент с индексом 2. Число учеников не меньше 10, поэтому этот элемент существует. Обозначим его threshold.
Выводим фамилию и имя каждого ученика с суммой не меньше threshold. Это включает трёх лучших и всех, кто разделяет с ними результат. Порог берётся по третьему ученику, а не по третьему различному значению: удалять повторения нельзя.
Обоснование. У ученика с суммой меньше threshold есть хотя бы три ученика с большей суммой, поэтому он не входит в нужную группу. У ученика с суммой не меньше threshold меньше трёх строго лучших; он либо среди трёх первых, либо делит с ними результат. Следовательно, условие отбора необходимо и достаточно.
Порядок вывода произвольный; программа сохраняет исходный порядок. Фамилию и имя выводим без оценок. Строки разбираются по пробелам, поскольку по условию фамилия и имя сами пробелов не содержат.
n = int(input())
students = []
for i in range(n):
row = input().split()
total = int(row[2]) + int(row[3]) + int(row[4])
students.append((total, row[0], row[1]))
scores = sorted((student[0] for student in students), reverse=True)
threshold = scores[2]
for total, surname, name in students:
if total >= threshold:
print(surname, name)Проверка. Пусть суммы десяти учеников в порядке ввода равны 15, 15, 12, 12, 12, 11, 10, 9, 8, 7. Третья сумма равна 12, поэтому выводятся первые пять учеников. Если все десять имеют одинаковые оценки, выводятся все десять. Если суммы равны 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, выводятся только первые трое.
Сумма оценок лежит между 3 и 15. Чтение и вывод занимают O(N), сортировка O(N log N), хранение O(N); при N ≤ 100 это небольшой объём. В исходном условии не требуется линейная сортировка или фиксированная память.
Ответ: Программа на Python 3 приведена в решении.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF6FF647.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.