第八届蓝桥杯省赛真题 - 7.日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入描述

一个日期,格式是 "AA/BB/CCAA/BB/CC" (0 \leq A, B, C \leq 90≤A,B,C≤9)。

输出描述

输出若干个不相同的日期,每个日期一行,格式是 "yyyy-MM-dd"。多个日期按从早到晚排列。

输入输出样例

输入

02/03/04

 输出

2002-03-04
2004-02-03
2004-03-02


注意:

1.输入数据的大小比较

2.闰年的判断

3.每月的最多天数

4.数据两两相同时的输出

代码如下:

#include <stdio.h>
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void judges(int a,int b,int c);
int main(){ 
	int num1,num2,num3;//存储读取到的三个数值 
	char ch1,ch2;//存储'/' 
	scanf("%d",&num1);//依次读取数据 
	scanf("%c",&ch1);
	scanf("%d",&num2);
	scanf("%c",&ch2);
	scanf("%d",&num3);
	//将三个数值进行比较,分不同的情况采取行动,注意相等时的处理要不同。注意根据数据的顺序改变调用函数时参数的传递 
	if(num1==num2 && num1==num3 && num2==num3){
		judges(num1,num2,num3);//y m d
	} 
	else{	
	
	if(num1>=num2 && num1>=num3){
		judges(num3,num2,num1);//d m y
		judges(num3,num1,num2);//m d y
		judges(num1,num2,num3);//y m d	
	}
	if(num2>=num1 && num2>=num3 && num1>num3){
		judges(num3,num1,num2);//m d y	
		judges(num3,num2,num1);//d m y
		judges(num1,num2,num3);//y m d
		
	}
	if(num2>num1 && num2>num3 && num3>=num1){
		judges(num3,num1,num2);//m d y
		judges(num1,num2,num3);//y m d
		
		if(num1!=num3){
			judges(num3,num2,num1);//d m y
		}
		
	}
	if(num3>=num1 && num3>=num2 && num1>=num2){
		judges(num1,num2,num3);//y m d
		judges(num3,num2,num1);//d m y
		if(num1!=num2){
			judges(num3,num1,num2);//m d y	
		} 
	
	}
	if(num3>num1 && num3>num2 && num1<num2){
		judges(num1,num2,num3);//y m d
		judges(num3,num1,num2);//m d y
		judges(num3,num2,num1);//d m y
	}}
	return 0;
}
void judges(int year,int month,int day){//自定义的函数,用来将符合条件的数据按照指定格式输出 
	
	if(year<60){year+=2000;}
	else{year+=1900;}
	if(((year%4==0) && (year%100!=0)) || (year%400==0)){mon[1]=29;}
	if(0<=month && month<=12 && mon[month-1]>=day && day>0){printf("%d-%2.2d-%2.2d\n",year,month,day);}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值