Задание 26
Во время сессии студенты сдают 4 экзамена, за каждый из которых можно получить от 2 до 5 баллов. Студенты, получившие хотя бы одну «двойку», считаются не сдавшими сессию. Результаты сессии публикуются в виде рейтингового списка, в котором сначала указаны идентификационные номера студентов (ID), сдавших сессию, в порядке убывания среднего балла за сессию, а в случае равенства средних баллов – в порядке возрастания ID. Затем располагаются ID студентов, не сдавших сессию: сначала – получивших одну «двойку», затем – две «двойки», потом ID студентов с тремя «двойками» и, наконец, ID студентов, получивших по 2 балла за каждый из экзаменов. Если студенты имеют одинаковое количество «двоек», то их ID в рейтинге располагаются в порядке возрастания.
Повышенную стипендию получают студенты, занявшие в рейтинговом списке первые 25 % мест, при условии отсутствия у них «двоек». Гарантируется, что без «двоек» сессию сдали не менее 25 % студентов. Найдите ID студента, который занимает последнее место среди студентов с повышенной стипендией, а также ID первого в рейтинговом списке студента, который имеет более двух «двоек».
В ответе запишите два целых положительных числа: сначала ID студента, который занимает последнее место среди студентов с повышенной стипендией, затем ID первого в рейтинговом списке студента, который имеет более двух «двоек».
Входные данные
В первой строке входного файла находится число N, обозначающее количество студентов (целое положительное число, не превышающее 10 000). Каждая из следующих N строк содержит 5 чисел через пробел: ID студента (целое положительное число, не превышающее 100 000) и четыре оценки, полученные им за сессию. Гарантируется, что общее число студентов N кратно 4 и хотя бы один студент имеет более двух «двоек».
Во входном файле все ID различны.
Выходные данные
Два натуральных числа: искомые ID студентов в порядке, указанном в условии задачи.
Типовой пример организации данных во входном файле
8
4 4 4 4 4
7 5 5 5 2
10 3 4 4 5
1 4 4 4 3
6 3 5 5 3
2 2 2 2 2
13 2 2 2 3
3 3 3 3 3
Решение в Excel
Решение в Python
Теория
Данное задание проверяет умение обрабатывать целочисленную информацию с использованием сортировки. Возможно использовать Excel (Настраиваемая сортировка) или создать собственную программу. В современных высокоуровневых языках программирования для решения можно воспользоваться встроенными методами сортировки, как правило sort(). Знать методы сортировки - выборкой, пузырьком или быструю сортировку не обязательно 🤫, но необходимо уметь работать с массивами.
Решение
1-й способ (Используем Excel и Настраиваемую сортировку) - самый быстрый (10 минут). Запускаем Excel и выполняем Открыть - Обзор, выбираем папку с сохраненным файлом задания (правее поля имя файла - тип файла выберите Все файлы)

Запускается мастер импорта из текстового файла. На первом шаге укажите формат данных с разделителями и формат файла 1251: Кириллица Windows.

На втором шаге укажите разделитель только пробел.

На третьем шаге оставьте формат данных столбцов общий.

На листе с импортированными данными переместите содержимое ячейки A1 переместите в ячейку I2, а в ячейке J2 введите формулу =I1/4 - это 25% от всех студентов. Далее удалите первую пустую строку.

В ячейке F1 с помощью функции =СЧЁТЕСЛИ(B1:E1;2) из категории статистические подсчитываем количество двоек за 4 экзамена, а в ячейке G1 средний балл. Выделяем формулы в ячейках F1 и G1 и двойным щелчком на маркере заполнения копируем вниз до последней строки.

Расчеты в таблице готовы - выделяем диапазон A1:G1 и комбинацией клавиш Ctrl+Shift+↓ расширяем выделение на все данные (можно без выделения прейти в A1) и в группе кнопок Редактирование на вкладке Главная выполняем команду Сортировка и Фильтр - Настраиваемая сортировка. В окне сортировки сначала сортируем столбец F (количество двоек) по возрастанию, добавляем сортировку по столбцу G (средний балл) по убыванию и сортировку по столбцу A (идентификационные номера студентов (ID)) по возрастанию.

Переходим в ячейку A2491 (быстрее ее адрес ввести в поле имени ячейки) - результат 52326 - ответ на первый вопрос. Аналогично повторяем сортировку сначала сортируем столбец F (количество двоек) по убыванию, затем сортировку по столбцу A (идентификационные номера студентов (ID)) по возрастанию и результат 635 (ID первого студента у которого три двойки) - ответ на второй вопрос.
2-й способ (Используем Python и сортировку). Считываем первую строку файла и выводим общее количество студентов и количество студентов с повышенной стипендией. Далее объявляем 3 списка stud1 - массив сдавших студентов, stud2 - массив студентов с 3 двойками и stud3 - массив не сдавших студентов.
Построчно считываем все оставшиеся строки файла, вычисляя средний балл и подсчитывая количество двоек. В массив stud1 заносим средний балл и id студента. После обработки файла сортируем массив сдавших студентов по убыванию среднего балла и выводим информацию о среднем балле n//4 студента, количества сдавших и не сдавших студентов, а также тех у кого 3 двойки. Далее из массива stud1 выбираем студентов со средним баллом 4.25 и помещаем их id в массив stud3, который сортируем по возрастанию id. Также определяется позиция start, с которой начинаются студенты со средним баллом 4.25 в массиве stud1. Искомый id студента будет stud[n//4-start-1]. Для студентов с 3 двойками - просто сортируем их и выводим студента с индексом 0.

Результат работы программы

Ответ
(Время не более 40 минут)
| 52326 | 635 |