• P1104 生日


    题目描述

    cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。

    输入格式

    输入共有 n + 1 n + 1 n+1 行,

    1 1 1 行为 OI 组总人数 n n n

    2 2 2 行至第 n + 1 n+1 n+1 行分别是每人的姓名 s s s、出生年 y y y、月 m m m、日 d d d

    输出格式

    输出共有 n n n 行,

    n n n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

    样例 #1

    样例输入 #1

    3
    Yangchu 1992 4 23
    Qiujingya 1993 10 13
    Luowen 1991 8 1
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #1

    Luowen
    Yangchu
    Qiujingya
    
    • 1
    • 2
    • 3

    提示

    数据保证, 1 < n < 100 11<n<100 1 ≤ ∣ s ∣ < 20 1\leq |s|<20 1s<20。保证年月日实际存在,且年份 ∈ [ 1960 , 2020 ] \in [1960,2020] [1960,2020]

    1.题目分析

    输出若干个人的生日信息,按照年龄从大到小排序,输出排序后的名字。
    如果生日的年月日相同,则按先输入的后输出。

    提示:这里使用结构体排序会更方便些。

    采用的是快速排序(即sort排序):
    头文件:

    #include 	
    
    • 1

    这里说几点传参问题:
    例如:sort(pos,pos+n,cmp);

    • 第一个参数pos代表数组的起始地址的指针
    • 第二个参数pos+n代表数组的结束地址的指针
    • 第三个参数cmp重写排序规则的函数

    2.题目思路

    1. 定义结构体存储个人信息:姓名,生日日期以及输入的初始顺序
    2. 定义sort排序的规则函数:生日从小到大,如果生日一致,先输入的后输出。
    3. 进入主函数
    4. 定义结构体数组,键入每个人的信息并记录输入的顺序
    5. 调用sort排序,传入结构体数组的起始,结束指针,规则函数
    6. 最后遍历打印结构体数组中的名字信息

    3.代码实现

    #include 
    #include 
    
    using namespace std;
    //每个人的信息
    typedef struct data {
        char name[20];
        int y, m, d;
        //初始顺序
        int sequence;
    } classmate;
    //定义sort的排序函数
    bool cmp(classmate c1, classmate c2) {
        //判断年月日按从小到大排
        if (c1.y == c2.y) {
            if (c1.m == c2.m) {
                if (c1.d == c2.d) {
                    //输入靠后的先输出
                    return c1.sequence > c2.sequence;
                } else {
                    return c1.d < c2.d;
                }
            } else {
                return c1.m < c2.m;
            }
        }
        return c1.y < c2.y;
    }
    
    int main() {
        int n;
        cin >> n;
        classmate classmates[n];
        //键入数据
        for (int i = 0; i < n; ++i) {
            cin >> classmates[i].name >> classmates[i].y >> classmates[i].m >> classmates[i].d;
            classmates[i].sequence = i + 1;
        }
        //排序
        sort(classmates, classmates + n, cmp);
    
        //输出结果
        for (int i = 0; i < n; ++i) {
            cout << classmates[i].name << endl;
        }
    
        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
  • 相关阅读:
    1、读Mybatis源码--cache缓存
    大型网站系统架构演化实例_5.使用反向代理和CDN加速网站响应
    现场直击|亚数TrustAsia精彩亮相IOTE深圳物联网展,CSA联盟展台等你来!
    Java毕业设计MVC:基于SSM实现计算机硬件评测交流平台
    frp内网穿透ssh,tcp经过服务器慢速和p2p模式实现高速吃满上传带宽
    作为运维你还在想要不要学Python?听听运维老司机怎么说
    单片机论文参考:5、基于单片机的自动打铃系统
    【积累】机器学习知识
    智能生成并盘活API研发资产
    PyTorch主要组成模块 | hook函数 | 正则化weight decay与Dropout | 标准化
  • 原文地址:https://blog.csdn.net/qq_61888137/article/details/132752846