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

日期问题

题目

https://www.lanqiao.cn/problems/103/learning/?page=3&first_category_id=1&sort=students_count&difficulty=30

 

题目要求

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;
}

运行结果

 

posted @ 2023-04-26 19:57  山远尽成云  阅读(116)  评论(0)    收藏  举报