回 帖 发 新 帖 刷新版面

主题:求助啊!大神们

输入

输入一个数T,后面T行每行有一个日期,格式是YYYY MM DD。如某人的生日是1991 03 03。
输出

每组测试数据输出一行,每行一个数,表示从出生到17岁生日所经过的天数。如果没有17岁的生日,输出-1。

样例输入

1
1991 03 03

样例输出

6210



我怎么打都是错的。哭
我的代码
#include <stdio.h>
void main()
{
    int judge(int x);
    int n,y,m,d,i,j;
    int sum,temp;
    int a[12]={31,0,31,30,31,30,31,31,30,31,30,31};
    scanf("%d",&n);
    while(n--)
    {
        sum=6206;   //17*365
        temp=0;
        scanf("%d %d %d",&y,&m,&d);
        if(judge(y)&&!judge(y+17)&&m==2&&d==29)
            printf("-1\n");
        else
        {
            if(judge(y)&&m<=2)
                sum+=1;
            for(i=y+1;i<y+17;i++)
            {
                if(judge(i)) sum+=1;    
            }
            if(judge(i)&&m>2)
                sum+=1;
            printf("%d\n",sum);
        }

    }
}
int judge(int x)
{
    if((x%4==0)&&(x%100!=0)||(x%4000==0))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

回复列表 (共1个回复)

沙发

#include <stdio.h>
void main()
{
    int judge(int x);
    int n,y,m,d,i,j;
    int sum,temp;
    int a[12]={31,0,31,30,31,30,31,31,30,31,30,31};
    scanf("%d",&n);
    while(n--)
    {
        sum = 6205; //sum=6206;   //17*365 怎么看着决者不对呢? 尾数应该是5吧。。
        temp=0;
        scanf("%d %d %d",&y,&m,&d);
        if(/*judge(y)&&*/!judge(y+17)&&m==2&&d==29)//都2月29了 能不是闰年么?
            printf("-1\n");
        else
        {
            if(judge(y)&&m<=2)
                sum+=1;
            for(i=y+1;i<y+17;i++)
            {
                if(judge(i)) sum+=1;    
            }
            if(judge(i)&&m>2)
                sum+=1;
            printf("%d\n",sum);
        }

    }
}
int judge(int x)
{
    if((x%4==0)&&(x%100!=0)||(x%400==0))//4000不对吧
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册