C语言解题:18岁生日

Posted 知道什么是码怪吗?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言解题:18岁生日相关的知识,希望对你有一定的参考价值。

题目描述

小明的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

输入

输入的第一行是一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

输出

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

样例输入 

1
1988-03-07

样例输出 

6574

做题算法思路

(1)如果是在2月29日出生,必定没有18岁生日。

(2)分2月28日前出生和2月28日后出生两种情况讨论:①如果出生在2月28日之前,那么不管下一年是不是闰年,到下一年的同一天的天数只跟当前年是否是闰年有关。②如果出生在2月28日之后,到下一年的天数需要判断下一年是不是闰年再做决定。

参考代码

#include<stdio.h>
int main()
{
	int count;//用于存储数据有几个出生日期	
	int number[200];//用于存储每个出生日期到18岁的天数 
	scanf("%d",&count);
	for(int j=0;j<count;j++)
	{
		int year=0,month=0,day=0,allDay=0;
		scanf("%d-%d-%d",&year,&month,&day);//按照格式接收数据

		//如果是闰年的2月29日出生,那么必定没有18岁生日,天数设置为-1
		if((year%400==0||(year%4==0&&year%100!=0))&&(month==2)&&(day==29))
		{
		    number[j]=-1;
		    continue;//下面的代码就不执行了,进行下一次循环 
		}

		//分2月28前后,2月28日之前不管下一年是不是闰年,到下一年同一天的天数只跟这一年有关
		//如果在2月28日之后,还要判断下一年是不是闰年,从而改变加的天数 

		if((month==2&&day<=28)||month==1) 	//2月28日之前 
		{									 
			for(int i=year;i<year+18;i++) 
			{
				if(i%400==0||(i%4==0&&i%100!=0))//闰年天数加 1 
				allDay+=366;
				else
				allDay+=365;
			}
		}
		if(month>2)	//2月之后 
		{
			for(int i=year+1;i<=year+18;i++)
			{
				if(i%400==0||(i%4==0&&i%100!=0))
				allDay+=366;
				else
				allDay+=365;
			}	
		}
		number[j]=allDay;//将总天数赋值给number存放 
		
	}
	for(int i=0;i<count;i++)//一起输出 
	printf("%d\\n",number[i]);
	return 0; 
}  

 

以上是关于C语言解题:18岁生日的主要内容,如果未能解决你的问题,请参考以下文章

hdu_1201 18岁生日

18岁生日

Hdu 1201 18岁生日

(HDU)1201 -- 18岁生日

text 18岁生日anomoly

Python 迎来 31 岁生日,蝉联年度编程语言排行榜冠军