1 /*20岁生日 2 时间限制:1000 ms | 内存限制:65535 KB 3 难度:1 4 描述 5 路过这的20岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达20岁生日时所经过的天数都是一样的呢?似乎并不全都是这样, 6 所以他想请你帮忙计算一下他和他的几个朋友从出生到达20岁生日所经过的总天数,让他好来比较一下。 7 输入 8 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。 9 输出 10 T行,每行一个数,表示此人从出生到20岁生日所经过的天数。如果这个人没有20岁生日,就输出-1。 11 样例输入 12 1 13 1988-03-07样例输出 14 7305来源 15 hdu 16 上传者 17 路过这 18 19 */ 20 21 #include<stdio.h> 22 int main() 23 { 24 int n; 25 scanf("%d", &n); 26 while(n--) 27 { 28 int i, year, month, day, a ; 29 int leap(int x); 30 scanf("%d-%d-%d", &year, &month, &day); 31 a = 0; 32 if( month == 2 && day == 29) 33 { 34 if( !leap(year+20) ) 35 { 36 printf("-1\n"); 37 continue; 38 } 39 } // 注意if与else的搭配 40 for(i = 1; i< 20; i++) 41 if( leap(year+i) ) a++; 42 if(leap(year) && leap(year+20)) 43 printf("%d\n",7300 + a + 1); 44 else if( !leap(year) && leap(year+20) ) 45 { 46 if(month > 2) printf("%d\n",7301+a); 47 else printf("%d\n",7300+a); 48 } 49 else if(leap(year) && !leap(year+20)) 50 { 51 if(month > 2) printf("%d\n",7300+a); 52 else printf("%d\n",7301+a); 53 } 54 else 55 printf("%d\n",7300+a); 56 } 57 return 0; 58 } 59 int leap(int x) 60 { 61 if( (x%4 == 0 && x%100 != 0) || (x % 400 == 0) ) 62 return 1; 63 else 64 return 0; 65 }
原文:http://www.cnblogs.com/a604378578/p/3691984.html