原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复