Решение: Три лучших ученика
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников $N$, которое не меньше 10, но не превосходит 100. Каждая из следующих $N$ строк имеет формат: <Фамилия> <Имя> <оценки>, где <Фамилия> — строка длиной не более 20 символов, <Имя> — строка длиной не более 15 символов, а <оценки> — три целых числа, соответствующие оценкам по пятибалльной системе. Все части строки разделены одним пробелом. Требуется написать программу, которая выводит фамилии и имена трёх лучших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трёх лучших, следует вывести также их фамилии и имена. Требуемые имена и фамилии можно выводить в произвольном порядке.
Пример входной строки: Иванов Петр 4 5 4
Решение по шагам
4 шагаДля каждого ученика считываем фамилию, имя и три оценки. Средние баллы можно не вычислять: число экзаменов у всех одинаково, поэтому сравнение средних баллов эквивалентно сравнению сумм оценок.
$$a_1+a_2+a_3$$Сохраняем для каждого ученика его фамилию, имя и сумму оценок, затем сортируем список по сумме в порядке убывания.
Сумма третьего элемента отсортированного списка задаёт минимальную сумму для требуемых учеников. Выводим всех учеников с суммой не меньше этой величины, включая тех, у кого такой же средний балл, как у третьего лучшего.
Один из вариантов реализации на Python:
$$students.sort(key=lambda x: x[2], reverse=True)$$Считать данные, отсортировать учеников по убыванию суммы трёх оценок и вывести всех, у кого сумма не меньше суммы ученика на третьем месте.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Использовать вещественное среднее и получить ошибки сравнения из-за округления.
Вывести ровно трёх учеников и не учесть дополнительные совпадения среднего балла.
Сравнивать только одну из трёх оценок вместо суммы всех оценок.
Забыть, что фамилия и имя должны выводиться через пробел.