成绩排序--清华机试真题;使用运算符重载

Bertha 。 2022-05-30 00:47 274阅读 0赞

成绩排序 (九度教程第 2 题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否
题目描述:

N
个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名
字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出
N
个学生排序后的信息。
输入:
测试数据有多组,每组输入第一行有一个整数
N

N<=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
年清华大学计算机研究生机试真题
思路:利用结构体排序来做这道题

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. struct stu_info{
  6. //结构体组成
  7. char name[101];
  8. int age;
  9. int score;
  10. }buf[1000];
  11. bool cmp(stu_info a,stu_info b){
  12. //结构体三重排序
  13. if(a.score!=b.score)
  14. return a.score<b.score;
  15. int tmp=strcmp(a.name,b.name);
  16. if(tmp!=0)
  17. return tmp<0;
  18. else
  19. return a.age<b.age;
  20. }
  21. int main(){
  22. int n ;
  23. while(scanf("%d",&n)!=EOF){
  24. for(int i=0;i<n;i++)
  25. scanf("%s%d%d",&buf[i].name,&buf[i].age,&buf[i].score);
  26. sort(buf,buf+n,cmp);//调用自定义函数
  27. for(int i=0;i<n;i++){
  28. printf("%s %d %d",buf[i].name,buf[i].age,buf[i].score);
  29. printf("\n");
  30. }
  31. }
  32. return 0;
  33. }

方法二:使用C++运算符重载来做这道题

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. struct stu_info{
  6. //结构体组成
  7. char name[101];
  8. int age;
  9. int score;
  10. bool operator <(const stu_info &b)const{
  11. //对小于号进行运算符重载
  12. if(score!=b.score)
  13. return score<b.score;
  14. int tmp=strcmp(name,b.name);
  15. if(tmp!=0)
  16. return tmp<0;
  17. else
  18. return age<b.age;
  19. }
  20. }buf[1000];
  21. int main(){
  22. int n ;
  23. while(scanf("%d",&n)!=EOF){
  24. for(int i=0;i<n;i++)
  25. scanf("%s%d%d",&buf[i].name,&buf[i].age,&buf[i].score);
  26. sort(buf,buf+n);
  27. for(int i=0;i<n;i++){
  28. printf("%s %d %d",buf[i].name,buf[i].age,buf[i].score);
  29. printf("\n");
  30. }
  31. }
  32. return 0;
  33. }

发表评论

表情:
评论列表 (有 0 条评论,274人围观)

还没有评论,来说两句吧...

相关阅读