原题链接:蓝桥杯2017年第八届真题-日期问题
解题思路:
1.简单穷举所有情况
2.用DFS函数按要求格式输出(徒有其名,简单的show功能啦)
[19/20]aa-bb-cc ———(注意标准输出要补零,eg: 2002-02-02)
3.处理重复:AABBCC相同、AACC相同、AABB相同;(其他按常规情况处理)
4.排序:升序
注意事项:注意19和20打头的区别,并排序筛选重复年份;
参考代码:
#include <iostream>//此题注意重复问题 using namespace std; int data[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int DFS(int aa,int bb,int cc,int year)//以年月日输出 { if(aa>=0&&aa<=99)//第一元素年份合法 { if(year%100!=0&&year%4==0||year%400==0) data[1]=29;//闰年处理 else data[1]=28; if(bb>=1&&bb<=12&&cc>=1&&cc<=data[bb-1])//第二元素月份、第三元素天数合法 { if(year>=2000&&year<=2059)//20世纪的年份 { printf("20%02d-%02d-%02d\n",aa,bb,cc); } else { printf("19%02d-%02d-%02d\n",aa,bb,cc); } } } } int main() { int AA,BB,CC,Y1,Y2; scanf("%d/%d/%d",&AA,&BB,&CC);//C语言格式化输入 //year有 CC AA,month有 BB AA,day有 CC BB AA if(AA>=60&&AA<=99)//AA产生的year1 { Y1=19*100+AA; } else { Y1=20*100+AA; } if(CC>=60&&CC<=99)//CC产生的year2 { Y2=19*100+CC; } else { Y2=20*100+CC; } if(AA==BB&&BB==CC)// AA,BB,CC 相同 { DFS(AA,BB,CC,Y1); return 0; } if(AA==BB&&BB!=CC)// AA,BB 相同 { if(Y1>Y2) { DFS(CC,AA,BB,Y2); DFS(AA,BB,CC,Y1); } else { DFS(AA,BB,CC,Y1); DFS(CC,AA,BB,Y2); } return 0; } //BB==CC是正常的输出 if(AA==CC&&AA!=BB)// AA,CC 相同 { if(AA>BB) { DFS(AA,BB,CC,Y1); DFS(CC,AA,AA,Y2); } else { DFS(CC,AA,AA,Y2); DFS(AA,BB,CC,Y1); } return 0; } if(Y1<Y2)//如果AA作为年份最小 { DFS(AA,BB,CC,Y1); if(BB>AA) { DFS(CC,AA,BB,Y2); DFS(CC,BB,AA,Y2); } else { DFS(CC,BB,AA,Y2); DFS(CC,AA,BB,Y2); } } else//如果CC作为年份最小 { if(BB>AA) { DFS(CC,AA,BB,Y2); DFS(CC,BB,AA,Y2); } else { DFS(CC,BB,AA,Y2); DFS(CC,AA,BB,Y2); } DFS(AA,BB,CC,Y1); } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复