18岁生日
Total Submission(s): 23411 Accepted Submission(s): 7494
1 1988-03-07
6574#include<stdio.h> int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int renyear(int year) { int count; if(year%400==0||(year%4==0&&year%100!=0)) count=1; else count=0; return count; } int main() { int n,y,m,d,sum,k,i,y1,y2,sum1,sum2; scanf("%d",&n); while(n--) { scanf("%d-%d-%d",&y,&m,&d); sum=0; sum=365*18;//18年都按平年365天算 for(i=1;i<18;i++) { sum=sum+renyear(y+i);//刚出生为0岁,从1岁到17岁每到闰年加1 } if(m<=2)//把出生到一岁的天数加上18岁那一年初到过生日的总天数算作一年,如果出生月份<2且为闰年的话总天数加1 sum+=renyear(y); else sum+=renyear(y+18);//如果出生月份>2月时且为闰年18岁那年要加1则总天数也要加一 if(m==2&&d==29) printf("-1\n"); else printf("%d\n",sum); } }思路:<1>将出生年所经历的天数与18岁生日那年度过的天数合在一起算作一年。<2>不考虑闰年,则18年共度过18*365天。<3>考虑闰年,首先出生年与18岁生日合在一起那年要单独考虑,其他年份只要是闰年,则总天数加1天即可。<4>单独考虑合在一起年份,若出生年是闰年,并且在2月29日之前出生的,那么他(她)必定经过2月29日这天,总天数加1,对于18岁那年,若该年是闰年,并且在2月28日之后出生的,他(她)同样必定经过2月29这天,所以总天数加1.
514



被折叠的 条评论
为什么被折叠?



