• PAT 1028 List Sorting


    1028 List Sorting

    Excel can sort records according to any column. Now you are supposed to imitate this function.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains two integers N (≤105) and C, where N is the number of records and C is the column that you are supposed to sort the records with. Then N lines follow, each contains a record of a student. A student's record consists of his or her distinct ID (a 6-digit number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).

    Output Specification:

    For each test case, output the sorting result in N lines. That is, if C = 1 then the records must be sorted in increasing order according to ID's; if C = 2 then the records must be sorted in non-decreasing order according to names; and if C = 3 then the records must be sorted in non-decreasing order according to grades. If there are several students who have the same name or grade, they must be sorted according to their ID's in increasing order.

    Sample Input 1:

    1. 3 1
    2. 000007 James 85
    3. 000010 Amy 90
    4. 000001 Zoe 60

    Sample Output 1:

    1. 000001 Zoe 60
    2. 000007 James 85
    3. 000010 Amy 90

    Sample Input 2:

    1. 4 2
    2. 000007 James 85
    3. 000010 Amy 90
    4. 000001 Zoe 60
    5. 000002 James 98

    Sample Output 2:

    1. 000010 Amy 90
    2. 000002 James 98
    3. 000007 James 85
    4. 000001 Zoe 60

    Sample Input 3:

    1. 4 3
    2. 000007 James 85
    3. 000010 Amy 90
    4. 000001 Zoe 60
    5. 000002 James 9

    Sample Output 3:

    1. 000002 James 9
    2. 000001 Zoe 60
    3. 000007 James 85
    4. 000010 Amy 90

    总结:这题没有什么难度,写出结果cmp函数就行了(注意,在写cmp函数的时候,还是严谨点,因为题目说的是非降序,在cmp2,3中后面那个比较不要直接<,应该<=)

    1. #include
    2. #include
    3. using namespace std;
    4. struct peo{
    5. int id,score;
    6. string name;
    7. }s[100010];
    8. //id排名升序
    9. bool cmp1(peo a,peo b){
    10. return a.id
    11. }
    12. bool cmp2(peo a,peo b){
    13. return a.name==b.name?a.id
    14. }
    15. bool cmp3(peo a,peo b){
    16. return a.score==b.score?a.id
    17. }
    18. int main(){
    19. int n,c;
    20. cin >> n >> c;
    21. for(int i=0;i
    22. cin >> s[i].id >> s[i].name >> s[i].score;
    23. }
    24. if(c==1) sort(s,s+n,cmp1);
    25. else if(c==2) sort(s,s+n,cmp2);
    26. else sort(s,s+n,cmp3);
    27. for(int i=0;i
    28. printf("%06d ",s[i].id);
    29. cout << s[i].name << ' ' << s[i].score << endl;
    30. }
    31. return 0;
    32. }

     依照惯例,看看大佬的代码:

    可以学习一下在cmp函数内部使用if判断是哪种情况的代码!

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int maxn = 100001;
    6. struct NODE {
    7. int no, score;
    8. char name[10];
    9. }node[maxn];
    10. int c;
    11. int cmp1(NODE a, NODE b) {
    12. if(c == 1) {
    13. return a.no < b.no;
    14. } else if(c == 2) {
    15. if(strcmp(a.name, b.name) == 0) return a.no < b.no;
    16. return strcmp(a.name, b.name) <= 0;
    17. } else {
    18. if(a.score == b.score) return a.no < b.no;
    19. return a.score <= b.score;
    20. }
    21. }
    22. int main() {
    23. int n;
    24. scanf("%d%d", &n, &c);
    25. for(int i = 0; i < n; i++)
    26. scanf("%d %s %d", &node[i].no, node[i].name, &node[i].score);
    27. sort(node, node + n, cmp1);
    28. for(int i = 0; i < n; i++)
    29. printf("%06d %s %d\n", node[i].no, node[i].name, node[i].score);
    30. return 0;
    31. }

    好好学习,天天向上!

    我要考研!

    2022.11.2

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. struct student{
    7. int id;
    8. char name[10];
    9. int grade;
    10. };
    11. int c,n;
    12. bool cmp(student a,student b){
    13. if(c==1) return a.id
    14. //strcmp返回值如果小于1,则说明 str1 小于 str2
    15. else if(c==2 && a.name!=b.name) return strcmp(a.name,b.name)<=0;
    16. else if(c==3 && a.grade!=b.grade) return a.grade
    17. return a.id
    18. }
    19. int main(){
    20. scanf("%d%d",&n,&c);
    21. vector s(n);
    22. for(int i=0;i
    23. scanf("%d %s %d",&s[i].id,s[i].name,&s[i].grade);
    24. sort(s.begin(),s.end(),cmp);
    25. for(int i=0;i
    26. printf("%06d %s %d\n",s[i].id,s[i].name,s[i].grade);
    27. return 0;
    28. }

  • 相关阅读:
    雾天行人车辆检测
    【笔记】JS的[Object file]类型转string
    第12章 - 执行引擎
    java框架----SSM快速整合教程
    CASE WHEN
    【基础篇】七、Flink核心概念
    Rust生态技术栈
    Python实战项目-7发送验证码/短信登录/短信注册接口
    mindspore详解
    【35. 多重背包】
  • 原文地址:https://blog.csdn.net/weixin_50679551/article/details/126874830