[蓝桥杯 2017 省 B] 日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入 #

复制代码
02/03/04

输出 #

复制代码
2002-03-04  
2004-02-03  
2004-03-02 

#include <iostream>

using namespace std;

int days[13]={0,31,30,31,30,31,30,31,31,30,31,30,31};

bool check_valid(int year,int month,int day){ //重点

if(month==0 ||month>12){ //判断

return false;

if(day==0 ||month!=2 &&day>days[month])

return false;

if(month==2){ //如果是二月特殊情况

int leap=year%100!=0 &&year%4==0 ||year%400==0;

if(day>days[2]+leap)

return false;

}

}

return true;

}

int main(int argc, char** argv) {

int a,b,c;

scanf("%a/%b/%c",&a,&b,&c);

for(int i=19600101;i<=20251231;i++){

int year=i/1000, month=i/100%100, day=i%100; //分别取年月日

if(check_valid(year,month,day)){ //自定义方法,检查是否满足条件。

if(year%100==a && month==b &&day==c ||month==a &&day==b &&year%100==c ||day==a &&month==b &&year%100==c){ //重点

printf("%d-%02d-%02d\n",year,month,day);

}

}

}

return 0;

}

相关推荐
爪哇学长29 分钟前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan33 分钟前
C语言:数组转换指针的时机
c语言·开发语言·算法
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
烦躁的大鼻嘎1 小时前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝1 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
用户37791362947552 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
福大大架构师每日一题2 小时前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_2 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
ifanatic2 小时前
[面试]-golang基础面试题总结
面试·职场和发展·golang
机器学习之心2 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer