蓝桥杯2017第八届C语言B组省赛习题题解——习题G.日期问题*

每日刷题(二十四)

蓝桥杯第八届C语言B组省赛习题

习题G:日期问题

在这里插入图片描述
在这里插入图片描述
这个题难度还是不大的,大家可能卡就在如何解析输入数据,这里我是将输入的数据输入一个数组,然后再将数组解剖成三块分给其他三个变量,这个题还考查了闰年以及月份所对应的天数的计算。
详细C代码如下

#include<stdio.h>

int leapyear(int year)
{
	if(year % 4 == 0 && year % 100 != 0)
		return 1;
	else if(year % 400 == 0)
		return 1;
	else
		return 0;
} 

int days(int month, int year)
{
	if(month == 2)
		if(leapyear(year))
			return 29;
		else
			return 28;
	else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
		return 31;
	else
		return 30;
}

int main()
{
	char string[8];
	scanf("%s",string);
	int a, b, c;
	a = (string[0] - '0') * 10 + (string[1] - '0');
	b = (string[3] - '0') * 10 + (string[4] - '0');
	c = (string[6] - '0') * 10 + (string[7] - '0');
	//可能性一:年/月/日 
	if(a >= 60)			//先处理年 
		a += 1900;
	else
		a += 2000;
	if(b <= 12 && b >= 1)
		if(c <= days(b,a) && c >= 1)
		{
			printf("%d-%02d-%02d\n",a, b, c);
		}
	
	a = (string[0] - '0') * 10 + (string[1] - '0');
	b = (string[3] - '0') * 10 + (string[4] - '0');
	c = (string[6] - '0') * 10 + (string[7] - '0');
	//可能性二:月/日/年
	if(c >= 60)
		c += 1900;
	else
		c += 2000;
	if(a <= 12 && a >= 1) 
		if(b <= days(a,c) && b >= 1)
		{
			printf("%d-%02d-%02d\n",c, a, b);
		}
		
	a = (string[0] - '0') * 10 + (string[1] - '0');
	b = (string[3] - '0') * 10 + (string[4] - '0');
	c = (string[6] - '0') * 10 + (string[7] - '0');
	//可能性三:日/月/年 
	if(c >= 60)
		c += 1900;
	else
		c += 2000;
	if(b <= 12 && b >= 1)
		if(a <= days(b, c) && a >= 1)
			printf("%d-%02d-%02d\n",c, b, a);

	return 0;	 
} 

经过验证,没问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果想看是否超出资源约定,可以试着加入以下元素
#include <time.h> 头文件
double start,finish; 变量
程序运行时间,在程序开始处用start=(double) clock(); 获得开始时间
在程序结束处用finish=(double)clock(); 获得结束时间
然后输出时间差 毫秒 数:
printf("%.4f ms",finish-start);
要查看内存使用情况可以在任务管理器中查看
我这个代码都是在资源约定以内的

这道题目的讲解到这里就算完成了,如果有什么其他的看法建议都可以在评论区进行交流讨论。如果喜欢我的文章,请记得三连哦,点赞关注转发,感谢您的支持,下期更精彩!!!

发布了40 篇原创文章 · 获赞 7 · 访问量 3111

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/104673038