题目描述
有N个学生的数据,将学生数据按成绩由低到高排序,如果成绩相同则按姓名首字母序排序,如果首字母也相同则按照年龄排序,并输出N个学生排序后的信息。
输入
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整型数)、成绩(小于等于100的正数)。
输出
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩
输入样例1
3
abc 20 99
bcd 19 97
bed 20 97
输出样例1
bcd 19 97
bed 20 97
abc 20 99
思路分析
对于这种排序条件这么多的,用sort函数排就可以了,很简单。
注意到sort函数自定义的排序规则。
AC代码
#include<iostream>
#include<algorithm>
using namespace std;
struct student
{
int old,score;
string name;
};
bool leibniz(student a,student b)
{
if(a.score!=b.score)
return a.score<b.score;
if(a.name[0]!=b.name[0])
return a.name[0]<b.name[0];
return a.old<b.old;
}
int main()
{
int t,i;
cin>>t;
student a[t];
for(i=0;i<t;i++)
cin>>a[i].name>>a[i].old>>a[i].score;
sort(a,a+t,leibniz);
for(i=0;i<t;i++)
cout<<a[i].name<<' '<<a[i].old<<' '<<a[i].score<<endl;
}