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
",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;
 }
原文地址:https://www.cnblogs.com/love-sherry/p/6942251.html