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