hdu-1201 18岁生日
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1201
题目类型:
模拟计算
题意概括:
计算一个人从出生到18岁生日经过了多少天
解题思路:
纯模拟过程
题目:
18岁生日
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 32779 Accepted Submission(s): 10615
Problem Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
1
1988-03-07
Sample Output
6574
# include <stdio.h> int djt(int y,int m,int d); int runnian(int y); int main() { int t,y,m,d,i; long long x; scanf("%d",&t); while(t--) { scanf("%d-%d-%d",&y,&m,&d); if(runnian(y)==1&&m==2&&d==29) x=-1; else { x=djt(18+y,m,d); for(i=y+1;i<18+y;i++) x+=365+runnian(i); x+=365+runnian(y)-djt(y,m,d); } printf("%lld\n",x); } return 0; } int runnian(int y)/*判断闰年*/ { if((y%400==0)||(y%4==0&&y%100!=0)) return 1; else return 0; } int djt(int y,int m,int d)/*判断这是第几天*/ { int x; x=d; switch(m) { case 12:x+=30; case 11:x+=31; case 10:x+=30; case 9:x+=31; case 8:x+=31; case 7:x+=30; case 6:x+=31; case 5:x+=30; case 4:x+=31; case 3:x+=28+runnian(y); case 2:x+=31; } return x; }