11:16 Разбор задания по структурам |
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы. Завуч школы №30 решила наградить двух учащихся, которые лучше всех сдали информатику. Программа должна вывести на экран фамилии и имена этих учеников. Если наибольший балл набрало больше двух человек — вывести количество таких учеников. Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего. Напишите эффективную, в том числе и по используемой памяти, программу(укажите используемую версию языка программирования),которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5 учеников школы №30. На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате: <Фамилия><Имя><Номер школы><Количество баллов> <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов. <Номер школы> — число в диапазоне от 1 до 99 <Количество баллов> — число в диапазоне от 1 до 100. Эти данные записаны через пробел, то есть в каждой строке ровно 3 пробела.
Решение
#include<iostream> #include<string> using namespace std; struct sc { string sname; string name; int ns; int b; }; void main() { int n, max = 0,k=0,t; cin >> n; sc *a = new sc[n]; for (int i = 0; i < n; i++) { cin >> a[i].sname >> a[i].name >> a[i].ns >> a[i].b; if (a[i].ns == 30) if (a[i].b > max) { max = a[i].b; k = 1; t = i; } else if (a[i].b == max) k++; } if (k == 1) cout << a[t].sname << a[t].name; else cout << k; }
|
|
Всего комментариев: 0 | |
|
|