|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.01.2016, 16:27 | #1 |
Новичок
Джуниор
Регистрация: 07.01.2016
Сообщений: 2
|
Задача из егэ. Частичное решение внутри.
Имеется список учеников разных школ, сдававших экзамен по информатике, с указанием их фамилии, имени, школы и набранного балла. Напишите программу, которая будет определять двух учеников школы № 37, которые лучше всех сдали информатику, и выводить на экран их фамилии и имена.
Если наибольший балл набрали более двух человек, нужно вывести только их количество. Известно, что информатику сдавали не менее 5 учеников школы № 37. На вход программе в первой строке подается количество учеников списке N. В каждой из последующих N строк находится информация в следующем формате: <Фамилия> <Имя> <Школа> <Балл> где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Школа> – целое число от 1 до 99, <Балл> – целое число от 1 до 100. Пример входной строки: Иванов Сергей 50 87 Пример выходных данных, когда найдено два лучших: Иванов Сергей Сергеев Иван Программа выводит только одного лучшего ученика. Чтобы вывести второго, нужно найти как бы второй максимум после первого, то есть нужно делать еще один цикл от 1 до первого максимума, так? Этого цикла тут нет. Не получается... Код:
________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (это кнопочка на панели форматирования с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 08.01.2016 в 16:00. |
08.01.2016, 16:35 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Надя, ещё вопрос актуален?
я бы решал эту задачу с использованием массива. варианта 2. один не очень эффективный, но очень простой. заводим обычный статический массив на 10000 записей (ограничиваем максимальное число учеников, которые могут учиться в 37-й школе). читаем записи из файла, если ученик из 37 школы - добавляем его в массив. После окончания записей сортируем массив по баллам по убыванию. Считаем, сколько записей имеют балл, равный первой записи (в первой записи у нас максимальный балл после сортировки) Если количество больше двух - выдали число, если меньше - выдали фамилии первого (и второго, если у него тот же балл) второй вариант. Эффективный. я лично его рекомендую. Заводим массив на два элемента. Заводим указатель в массиве, он же счётчик ребят с максимальным баллом. Если встретили запись с баллом больше, чем MAX, то счётчик устанавливаем в 1, запись об ученике в массив. Если встретили запись с баллом равным MAX, то, если увеличиваем счётчик. если он меньше 2, сохраняем запись об ученике в массив. Закончился цикл ввода, выводим или счётчик (если он больше двух) или содержимое массива. Всё. |
09.01.2016, 01:33 | #3 | |
Новичок
Джуниор
Регистрация: 07.01.2016
Сообщений: 2
|
Спасибо большое за ответ. На самом деле, решение было не мое и вообще не очень шарю во всем этом. Но все-таки попробовала воспользоваться вашим первым вариантом и попробовала решить для начала часть задачи:
Цитата:
Код:
|
|
10.01.2016, 00:57 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
сочувствую...
ну ладно. вот код для предложенного мною выше второго алгоритма. Разбирайте: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Частичное решение | adika00 | Общие вопросы C/C++ | 3 | 11.04.2014 15:10 |
Задача ЕГЭ | PANDA8 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 28.03.2011 19:52 |
Задача ЕГЭ | Rusl92 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 18.04.2009 10:49 |