题目背景:东东所在的班级有N名同学,期末考试进行了数学、语文、英语、地理四门功课的测试。班主任要将这N名学生中总分前三名定为本学期的“学习小标兵”。现在给出这N名学生的姓名和各科成绩,请你编程找到总分前三名,并依次输出他们的姓名。所给数据不会有总分相同的情况。
输入格式:
输入包含N+1行,第一行仅有一个正整数N(3≤N≤40),表示东东班里学生的总数,接下来的N行,每行描述一个学生的考试信息,依次为姓名、数学成绩、语文成绩、英语成绩与地理成绩,两两之间用一个空格分隔。
注意:姓名(不会同名)都用小写字母表示(不超过10个字母),成绩全都是不超过200的非负整数。
输出格式:
输出包含三行,每行仅包含一个学生的姓名,依次为第一名到第三名学生的姓名。
示例代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Student
{
string name;
unsigned int A;
unsigned int B;
unsigned int C;
unsigned int D;
Student(){}
Student(string n, unsigned int a, unsigned int b, unsigned int c, unsigned int d) : name(n), A(a), B(b), C(c), D(d) {}
};
bool cmp(Student x, Student y)
{
return x.A + x.B + x.C + x.D > y.A + y.B + y.C + y.D;
}
int main()
{
int N;
cin >> N;
Student s[40];
for (int i = 0; i < N; i++)
{
string nn;
unsigned int a, b, c, d;
cin >> nn >> a >> b >> c >> d;
Student temp(nn, a, b, c, d);
s[i] = temp;
}
sort(s, s + N, cmp);
for (int i = 0; i < 3; i++)
{
if (i != 2)
{
cout << s[i].name << endl;
}
else
{
cout << s[i].name;
}
}
return 0;
}