王道论坛|第二章——快速排序sort+结构体的应用(成绩排序)

题目描述:

N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名

字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出 N

个学生排序后的信息。


输入:

测试数据有多组,每组输入第一行有一个整数 NN<=1000),接下来的 N

行包括 N个学生的数据。每个学生的数据包括姓名(长度不超过 100的字符串)

年龄(整形数)、成绩(小于等于 100的正数)。


输出:

将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。然后

输出学生信息,按照如下格式:姓名年龄成绩


样例输入:

3

abc 20 99

bcd 19 97

bed 20 97


样例输出:

bcd 19 97

bed 20 97

abc 20 99


提示:

学生姓名的字母序区分字母的大小写,如 A要比 a的字母序靠前(因为 A

ASC码比 a ASC码要小)


来源:

2000年清华大学计算机研究生机试真题

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct student
{
	char name[101];
	int age;
	int score;	
};
student f[1001];
bool cmp(student x,student y)
{
	if(x.score!=y.score) return x.score<y.score;
	if(x.score==y.score) return x.name>y.name; 
	if(x.score==y.score && x.name==y.name) return x.age<y.age;
} 
int main()
{
	int n,j;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>f[i].name>>f[i].age>>f[i].score;	
	}
	sort(f,f+n,cmp);
	for(int i=0;i<n-1;i++)
	{
		cout<<f[i].name<<' '<<f[i].age<<' '<<f[i].score<<endl; 	
	}
	cout<<f[n-1].name<<' '<<f[n-1].age<<' '<<f[n-1].score;
	return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_36718092/article/details/80218367