原题链接:蓝桥杯2017年第八届真题-日期问题
这是一道典型的模拟题,就是按照题目说的意思去做就行
要输出一个日期,这个日期必须满足:
这个日期是合法的(存在这个日期);
这个日期在规定范围内
因为答案最多只有三个,而且A,B,C
如何排列都已经事先知道了,所以只需要定义一个check(year,month,day)
函数,用来判断传入的年月日是否符合规定,分别把三种排列输入函数内,若合法,则保存下来
#include <iostream> // 包含输入输出流的头文件 using namespace std; // 使用标准命名空间 int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义保存每个月天数的数组 bool check_valid(int y,int m,int d) // 定义函数,用于检查日期是否合法 { if(!m||m>12||!d) // 如果月份为0或大于12,或者日期为0,返回false return false; if(m!=2&&d>days[m]) // 如果月份不是2且日期大于该月的天数,返回false return false; if(m==2) // 如果月份为2 { int leap = (y%4== 0&&y%100!=0) || (y % 400 == 0); // 判断是否是闰年 if(d>28+leap) // 如果日期大于28或29,根据闰年情况返回false return false; } return true; // 其他情况返回true,即日期合法 } int main() // 主函数 { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); // 输入输出流设置,加速输入输出 int a,b,c; // 声明整型变量a、b、c scanf("%d/%d/%d",&a,&b,&c); // 从输入流中按指定格式读取三个整数保存到a、b、c中 for(int i=19600101;i<=20591231;i++) // 循环从1960年1月1日到2059年12月31日 { int year=i/10000; // 计算年份 int month=i%10000/100; // 计算月份 int 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; // 返回0,表示程序执行成功 }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复