首页 > 代码库 > hdu 1201 18岁生日 (简单题)
hdu 1201 18岁生日 (简单题)
18岁生日
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18281 Accepted Submission(s): 5776
Problem Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
11988-03-07
Sample Output
6574
解题思路:以闰年和2月29号作为分界线吧。如果她出生的那一年是闰年而且是2月29号,则判断18年后是否是闰年,若不是则输入-1;然后根据出生的那年和18岁那年的日期来做特判吧。
#include <stdio.h>int main(){ int T; int year, month, day; int run, ping, sum, mark; scanf("%d", &T); while(T--) { scanf("%d-%d-%d", &year, &month, &day); run = 0; ping = 0; sum = 0; mark = 1; if(month == 2 && day == 29 && !( ( (year+18)%4 == 0 && (year+18)%100!=0 ) || (year+18)%400==0) ) { printf("-1\n"); continue; } for(int i = 1; i<=18; i++) { if( ( (year+i)%4 == 0 && (year+i)%100!=0 ) || (year+i)%400==0 ) run++; else ping++; } sum = 366*run + 365*ping; if( ( ( year%4 == 0 && year%100!=0 ) || year%400==0) && month<=2 && day<=28 ) sum++; if( ( ( (year+18)%4 == 0 && (year+18)%100!=0 ) || (year+18)%400==0) && month<=2 && day<=28) sum--; printf("%d\n", sum); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。