【每天例题】蓝桥杯 C语言 日期问题
日期问题
题目

题目要求
1.这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日
2.这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。
3.使得文献上的一个日期,存在很多可能的日期与其对应。
4.多个日期按从早到晚排列
思路分析
1.由于多个日期则需要按照从早到晚排序,所以当我们使用for循环将日期逐渐增大即可解决该问题。
2.在遍历日期时,我们需要进行日期判定,将不符合日期的数筛选出去。
3.对年份取后两位数,将年月日与文献的年月日一一对照,符合要求则输出。
代码
#include<stdio.h>
#include<stdlib.h>
int a,b,c;
int riqi(int i,int j,int k)
{
i=i%100;//将年份取后两位数,符合文献记录格式
if(a==i&&b==j&&c==k)//年月日
{
return 1;
}
if(a==j&&b==k&&c==i)//月日年
{
return 1;
}
if(a==k&&b==j&&c==i)//日月年
{
return 1;
}
return 0;//不符合文献记载的日期
}
int main()
{
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,j,k;
scanf("%d/%d/%d",&a,&b,&c);
for(i=1960;i<=2059;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))//判断是否为闰年
{
days[2]=29;
}
else
{
days[2]=28;
}
for(j=1;j<=12;j++)//月份
{
for(k=1;k<=days[j];k++)//日期
{
if(riqi(i,j,k))
{
printf("%d-%02d-%02d\n",i,j,k);
}
}
}
}
return 0;
}
运行结果


浙公网安备 33010602011771号