18岁生日
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24349 Accepted Submission(s): 7774
1 1988-03-07
6574
代码中需要注意一点,出生日期是在3月份之前还是之后,若是在之后,则下面for语句中判断的时候应该从出生后下一年到所在的当前年,例如是1988-3-07,可知,当前年的二月份已经过去,所以不应该再对它进行讨论,而应该对它当前年的二月份进行讨论,因为这一年的二月份已经过去。二月份之前的思想相同。
#include<stdio.h> #include<math.h> int main() { int y,m,d,n,k; char c; scanf("%d",&n); while(n--) { k=0; ///用来统计出生以后共经过了多少个2月29日 scanf("%d%c%d%c%d",&y,&c,&m,&c,&d); ///输入出生天数 if(m==2&&d==29) ///若是这种条件,则是四年一个生日,18岁那年没有这一天 { printf("-1\n"); continue; } else { ///判断出生月份是不是大于三月,如果是,则 if(m>=3) { for(int i=y+1; i<y+19; ++i) if((i%4==0&&i%100!=0)||i%400==0) ///判断是不是闰年 k++; } else { for(int i=y; i<y+18; ++i) if((i%4==0&&i%100!=0)||i%400==0) k++; } } printf("%d\n",18*365+k); } return 0; }