• 【PAT甲级】1028 List Sorting


    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
    📚专栏地址:PAT题解集合
    📝原题地址:题目详情 - 1028 List Sorting (pintia.cn)
    🔑中文翻译:列表排序
    📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
    ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

    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:

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

    Sample Output 1:

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

    Sample Input 2:

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

    Sample Output 2:

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

    Sample Input 3:

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

    Sample Output 3:

    000002 James 9
    000001 Zoe 60
    000007 James 85
    000010 Amy 90
    
    • 1
    • 2
    • 3
    • 4
    题意

    第一行给定学生人数 N 和序号 C

    按照给定序号数对学生进行排序:

    如果 C = 1 ,则按照 ID 升序的顺序排序。

    如果 C = 2 ,则按照名称以不降序的顺序排序。

    如果 C = 3 ,则按照成绩以不降序的顺序排序。

    当出现学生名字相同或是成绩相同的情况时,按照 ID 升序的顺序,对他们进行排序。

    思路
    1. 用结构体数组存储学生信息,注意要用 scanf 输入,这题数据量比较大,用 cin 会超时。
    2. 分别设定三个比较函数,然后根据给定的 C 值进行对应的排序。
    3. 输出排序后的结果。
    代码
    #include
    using namespace std;
    
    const int N = 100010;
    struct Student {
        string id, name;
        int grade;
    }all[N];
    
    //按照id升序排序
    bool cmp1(Student& s1, Student& s2)
    {
        return s1.id < s2.id;
    }
    
    //按照名字升序排序
    bool cmp2(Student& s1, Student& s2)
    {
        if (s1.name != s2.name)    return s1.name < s2.name;
        return s1.id < s2.id;
    }
    
    //按照成绩升序排序
    bool cmp3(Student& s1, Student& s2)
    {
        if (s1.grade != s2.grade)  return s1.grade < s2.grade;
        return s1.id < s2.id;
    }
    
    int main()
    {
        int n, c;
        scanf("%d %d", &n, &c);
    
        //输入学生信息
        char id[10], name[10];
        for (int i = 0; i < n; i++)
        {
            int grade;
            scanf("%s %s %d", &id, &name, &grade);
            all[i] = { id,name,grade };
        }
    
        if (c == 1)    sort(all, all + n, cmp1);   //按照id升序排序
        else if (c == 2)   sort(all, all + n, cmp2);   //按照名字升序排序
        else    sort(all, all + n, cmp3);   //按照成绩升序排序
    
        //输出排序结果
        for (int i = 0; i < n; i++)
            printf("%s %s %d\n", all[i].id.c_str(), all[i].name.c_str(), all[i].grade);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
  • 相关阅读:
    Hadoop-Hbase
    模仿 mapstruct 实现一个微服务编排框架(上)
    微信小程序学习
    java计算机毕业设计干洗店订单管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    基于android的购物APP系统设计与实现
    Java项目:ssm赛事打分系统
    python的format函数的用法及实例
    基于Go语言快速搭建Iris+Xorm后台管理系统
    java并发编程:synchronized同步方法
    升级targetSdkVersion至33(以及迁移至Androidx)
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/126842144