[蓝桥杯2017初赛]日期问题(旧题新做)

本文讲述了作者在处理日期问题上的经历,通过大佬博客参考解决了蓝桥杯2017初赛中关于日期数字化和排序的问题,强调了细节处理在编程中的重要性。

这题我没做出来,我是参考了大佬的博客才写出来的

//[蓝桥杯2017初赛]日期问题
//这道题是一道关于处理的题,也涉及思维,不过我确实没想到,继续学习吧,吃一堑长一智呗
//
//

#include<bits/stdc++.h>
using namespace std;
#define ll long long

typedef struct{
	int nian;
	int yue;
	int ri;
	int all;//添加一个成员变量all,all的意思是日期的数字化,比如说"2022-04-02",
			//数字化后就是2022*10000+4*100+2=20220402,这样简化了对日期的排序,
			//最后日期的去重也用到了变量all
}rq;
rq r[3];
int k=0;
int ts[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年二月29   平年二月28
bool cmp(rq r1,rq r2){
	return r1.all<r2.all;
}
void dy(int year,int month,int day){
	if((year%4==0&&year%100!=0)||(year%400==0)) ts[2]=29;
	else ts[2]=28;
	
	if(month<1||month>12) return;
	if(day<1||day>ts[month]) return;
	if(year>=0&&year<=59) r[k].nian=2000+year;
	else r[k].nian=1900+year;
	r[k].yue=month;
	r[k].ri=day;
	r[k].all=r[k].nian*10000+r[k].yue*100+r[k].ri;
	k+=1;
}
int main(){
	int a,b,c;
	scanf("%d/%d/%d",&a,&b,&c);
	dy(a,b,c);
	dy(c,a,b);
	dy(c,b,a);

	sort(r,r+k,cmp);
	
	int ans=0;
	for(int i=0;i<k;i++){
		if(r[i].all!=ans){
			printf("%d-%02d-%02d\n",r[i].nian,r[i].yue,r[i].ri);
			ans=r[i].all;
		} 
		
	} 

}

,,,,这种题如果细节地方处理不好,还是比较难的,咱就是说吃一堑长一智呗,以后做题记住就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值