题目描述
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入描述:
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出描述:
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩
学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
示例1
输入
3
abc 20 99
bcd 19 97
bed 20 97
输出
bcd 19 97
bed 20 97
abc 20 991.自定义排序规则
1 #include<iostream>
2 #include<algorithm>
3 #include<
string.h>
4 using namespace std;
5 struct E
6 {
7 char name[
101];
8 int age;
9 int score;
10 }buf[
1005];
11 bool cmp(E a,E b)
//自定义排序规则
12 {
13 if(a.score!=b.score)
return a.score<
b.score;
14 int temp=
strcmp(a.name,b.name);
15 if(temp!=
0)
return temp<
0;
16 else return a.age<
b.age;
17 }
18 int main()
19 {
20 int n;
21 while(cin>>n&&
n)
22 {
23 for(
int i=
0;i<n;i++
)
24 {
25 cin>>buf[i].name>>buf[i].age>>
buf[i].score;
26 }
27 sort(buf,buf+
n,cmp);
28 for(
int i=
0;i<n;i++
)
29 cout<<buf[i].name<<
" "<<buf[i].age<<
" "<<buf[i].score<<
endl;
30 }
31 return 0;
32 }
View Code
2.运算符重载 //https://www.cnblogs.com/ECJTUACM-873284962/p/6771262.html
1 #include<iostream>
2 #include<algorithm>
3 #include<
string.h>
4 using namespace std;
5 struct E
6 {
7 char name[
101];
8 int age;
9 int score;
10 bool operator < (
const E &b)
const //运算符重载
11 {
12 if(score!=b.score)
return score<
b.score;
13 int temp=
strcmp(name,b.name);
14 if(temp!=
0)
return temp<
0;
15 else return age<
b.age;
16 }
17 }buf[
1005];
18
19 int main()
20 {
21 int n;
22 while(cin>>n&&
n)
23 {
24 for(
int i=
0;i<n;i++
)
25 {
26 cin>>buf[i].name>>buf[i].age>>
buf[i].score;
27 }
28 sort(buf,buf+
n);
29 for(
int i=
0;i<n;i++
)
30 cout<<buf[i].name<<
" "<<buf[i].age<<
" "<<buf[i].score<<
endl;
31 }
32 return 0;
33 }
View Code
转载于:https://www.cnblogs.com/qing123tian/p/11140557.html
相关资源:数据结构—成绩单生成器