本文主要是介绍NYOJ-312-20岁生日-2013年08月17日08:42:42,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
20岁生日
时间限制: 1000 ms | 内存限制: 65535 KB
难度: 1
- 描述
- 路过这的20岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达20岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达20岁生日所经过的总天数,让他好来比较一下。
- 输入
- 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。 输出
- T行,每行一个数,表示此人从出生到20岁生日所经过的天数。如果这个人没有20岁生日,就输出-1。 样例输入
-
1 1988-03-07
样例输出 -
7305
# include<stdio.h>int isRUNNIAN(int year)
{if(year%400==0 ||(year%4==0 && year%100!=0))return 1;else return 0;
}int isDIJITIAN(int year,int month,int day)
{int i;int n=0;for(i=1;i<month;i++){if(i==1 || i==3 || i==5|| i==7 || i==8 || i==10 || i==12)n+=31;else if(i==4 || i==6 || i==9 || i==11)n+=30;else if(i==2)if(isRUNNIAN(year))n+=29;elsen+=28;}n+=day;return n;
}int main()
{int T,year,month,day,a,b,c,result,i;scanf("%d",&T);while(T--){scanf("%d-%d-%d",&year,&month,&day);if(isRUNNIAN(year+20)){if(month==4 || month==6 || month==9 || month==11){if(day>30){printf("-1\n");}}else if(month==2){if(day>29){printf("-1\n");continue;}}}else{if(month==4 || month==6 || month==9 || month==11){if(day>30){printf("-1\n");}}else if(month==2){if(day>28){printf("-1\n");continue;}}}a = 0;b = 0;c = 0;if(isRUNNIAN(year)){a = 366 - isDIJITIAN(year,month,day);}else{a = 365 - isDIJITIAN(year,month,day);}for(i = year+1;i<year+20;i++){if(isRUNNIAN(i))b += 366;elseb += 365;}c = isDIJITIAN(year+20,month,day);result = a + b + c;printf("%d\n",result);}return 0;
}
这篇关于NYOJ-312-20岁生日-2013年08月17日08:42:42的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!