HDU-1201-18岁生日
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1201
这个题目在比赛的时候提交了很多次,都是WA,主要错在,我没有考虑最后一年的,后一年,即y+18那一年如果是闰年并且月份m>=3||(m==2&&d==29)
那么天数要多加一天。
分三个部分 y y+1->y+17 y+18
WA代码
#include<stdio.h>
int main(void)
{
    int kk(int n);
    int T;
    int y,m,d;
    int i,j;
    int s;
    scanf("%d",&T);
    while(T--)
    {
        s=0;
        scanf("%d-%d-%d",&y,&m,&d);
        if(kk(y)&&m==2&&d==29)
        {
            if(kk(y+17)==0)
            {
                printf("-1\n");
                continue;
            }
        }
        if(kk(y))
        {
            if(m<=2&&d<=28)
            s=s+366;
            else
            s=s+365;
        }
        else
        s=s+365;
        for(i=y+1;i<y+17;i++)
        {
            if(kk(i))
            s=s+366;
            else
            s=s+365;
        }
        if(kk(y+17))
        {
            if(m>2)
            s=s+366;
            else if(m==2&&d==29)
            s=s+366;
            else
            s=s+365;
        }
        else
        s=s+365;
        printf("%d\n",s);
    }
    return 0;
}
int kk(int n)
{
    if(n%4==0)
    {
        if(n%100==0)
        {
            if(n%400==0)
            return 1;
            else
            return 0;
        }
        else
        return 1;
    }
    else
    return 0;
}
AC代码
#include<stdio.h>
int main(void)
{
    int kk(int n);
    int T;
    int y,m,d;
    int i,j;
    int s;
    scanf("%d",&T);
    while(T--)
    {
        s=0;
        scanf("%d-%d-%d",&y,&m,&d);
        if(kk(y)&&m==2&&d==29)
        {
            if(kk(y+17)==0)
            {
                printf("-1\n");
                continue;
            }
        }
        if(kk(y))
        {
            if(m<=2&&d<=28)
            s=s+366;
            else
            s=s+365;
        }
        else
        s=s+365;
        for(i=y+1;i<=y+17;i++)
        {
            if(kk(i))
            s=s+366;
            else
            s=s+365;
        }
        if(kk(y+18)&&(m>=3||(m==2&&d==29)))
        s++;
        printf("%d\n",s);
    }
    return 0;
}
int kk(int n)
{
    if(n%4==0)
    {
        if(n%100==0)
        {
            if(n%400==0)
            return 1;
            else
            return 0;
        }
        else
        return 1;
    }
    else
    return 0;
}
AC代码
#include<stdio.h>
int main(void)
{
    int run(int n);
    int t,i;
    int y,m,d;
    scanf("%d",&t);
    while(t--)
    {
        int s=0;
        scanf("%d-%d-%d",&y,&m,&d);
        if(run(y+18)==0&&m==2&&d==29)
        {
            printf("-1\n");
            continue;
        }
        if(run(y)&&m<=2)
        s++;
        for(i=1;i<=17;i++)
        {
            if(run(y+i))
            s++;
        }
        if(run(y+18)&&(m>2||(m==2&&d==29)))
        s++;
        printf("%d\n",18*365+s);
    }
    return 0;
}
int run(int n)
{
    if(n%400==0||(n%4==0&&n%100!=0))
    return 1;
    return 0;
}
程序之路漫漫无期,唯有坚持不懈,无畏艰难,才能攀登高峰。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号