StarHui


私信TA

用户名:uq_15565483691

访问量:2315

签 名:

只要你想,世界就会出现奇迹!

等  级
排  名 337
经  验 5193
参赛次数 2
文章发表 24
年  龄 18
在职情况 学生
学  校 西安汽车职业大学
专  业 人工智能

  自我简介:

大一新生一枚 一起学习交流,请加V:StarHui0415 个人公众号:阿辉的大本营 公众号会每天更新一道算法题!!!

TA的其他文章

“扮猪吃老虎”题
浏览:134
时间效率题
浏览:22
最简单求法
浏览:52

解题思路:
                大致思路:一看题日期排序,有年月日那么多变量,必然要使用结构体数组来进行排序啊,加上标准库里面的sort函数,不是轻松AC吗?但是还是有一些细节问题的,不要在细节上犯错误。下面我来详细的写一下结构体数组和sort里面的cmp函数。

                结构体:一组数据往往具有不同的数据类型,数组无法存放,这时需要用到结构体,结构体是一种构造数据类型,是由若干个"成员"组成的,每一个成员可以是一个基本数据类型或是一个构造类型。使用用来存储多种类型最合适不过了!下面就是一个最简单的结构体变量。对结构体变量赋值是通过点号(.)来进行的,也可以通过等号(=)。

                        

1.png

                结构体数组:一个结构体变量可以存放一组数据,如果多组数据需要进行运算,应该应用数组,这就是结构体数组。数组的元素也可以是结构类型的。结构数组的每一个元素不再是简单的标准类型,而是具有相同结构类型的下标结构变量,每个元素都是一个结构类型是数据,它们都包括各个成员。下面就是一个结构体数组。

                                

1.png

                    sort函数cmp实现:都知道标准库里面有个sort函数,它可以对结构体进行排序,其核心就是cmp函数。需要根据题目逻辑来写,函数返回类型是bool类型的。先讲一下这个怎么写,先写一个成绩+学号的排序吧。

1.png

就是那么的简单!!!言归正传,这个题的cmp逻辑是先判断年,再判断月,最后判断日;如果年不相同,直接返回年的比较即可;相同的话就比较月,如果月也相同就返回日的比较。

注意事项:
                1、当使用while循环不断输入数据时,不能直接在循环使用自增运算符(++),要在循环里面再自增。(我就是因为这个才错的)

                2、sort函数里面的cmp函数逻辑要写好,我看大部分的题解都会有警告,因为可能没有返回值,老老实实使用嵌套if语句写才最好

                3、输出日期时,可能会有前导零,加上月和日最多有两位数字,使用使用%02d来控制输出结果;0是标识,补充前导零,2是宽度,输出2位数字。想看详细的链接在这:https://www.runoob.com/cprogramming/c-function-printf.html

参考代码:

#include <iostream>

using namespace std;

struct date//日期结构体数组
{
    int year;
    int month;
    int day;
}a[100];

bool cmp(date x,date y)
{
    if(x.year != y.year)//如果年份不一样,直接返回年份的比较
        return x.year < y.year;
    else
    {
        if(x.month != y.month)//如果年份相同,在判断月,如果还相同,就判断日
            return x.month < y.month;
        else
            return x.day < y.day;
    }
}

int main()
{
    int k = 0;
    while(~scanf("%d/%d/%d",&a[k].month,&a[k].day,&a[k].year))//取反判断是否到文件末尾,或者这样写 while(cin >> a[k].month >> a[k].day >> a[k].year;)
        k++;
    sort(a,a + k,cmp);//结构体排序
    for(int i = 0;i < k;i++)
       printf("%02d/%02d/%d\n",a[i].month,a[i].day,a[i].year);//0是标识,可以补充前导零;2是宽度,表示最少位数
    return 0;
}


 

0.0分

7 人评分

  评论区