| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1197 人关注过本帖
标题:杭电1201(18岁生日)
只看楼主 加入收藏
conquerorbzm
Rank: 2
等 级:论坛游民
帖 子:35
专家分:33
注 册:2010-7-23
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:3 
杭电1201(18岁生日)
请大家帮我看看,我觉得结果是对的,但它给我wa,是否哪里还有漏洞,若能帮我找出来十分感谢。
#include"stdio.h"
int leap(int n)                                        //这是一个判断是否是闰年的函数。
{    int a;
    if(n%4==0 && n%100!=0 || n%400==0)
        a=1;
    else a=0;
    return(a);
}
int main()
{    int leap(int n);
    int i,j,k,year,day,month;
    int b,c,d,n,sum;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d-%d-%d",&year,&month,&day);
        sum=0;b=leap(year);d=leap(year+18);            //b是判断第一年是否是闰年,d是第18岁是否是闰年。
        if(b==1 && month==2 && day==29)            
        {printf("-1\n");continue;}
        for(i=0;i<18;i++)                            //这里是求总天数。
        {
            if(leap(year)==1)
                sum+=366;
            else sum+=365;
            year++;
        }
        if(b==1 && month>2)                            //这里排除虽然第一年和最后一年虽然是润年,但生日,不符合要求的,减去多余一天。
            sum-=1;
        if(d==1 && (month<=2 && day<29))
            sum-=1;
        printf("%d\n",sum);
    }
    return 0;
}
            
搜索更多相关主题的帖子: 生日 
2010-08-02 14:57
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:10 
#include"stdio.h"
int leap(int n)                                        //这是一个判断是否是闰年的函数。
{    int a;
    if(n%4==0 && n%100!=0 || n%400==0)
        a=1;
    else a=0;
    return(a);
}
int main()
{    int leap(int n);
    int i,j,k,year,day,month;
    int b,c,d,n,sum;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d-%d-%d",&year,&month,&day);
        sum=0;b=leap(year);d=leap(year+18);            //b是判断第一年是否是闰年,d是第18岁是否是闰年。
        if(b==1 && month==2 && day==29)            
        {printf("-1\n");continue;}
        for(i=0;i<18;i++)                            //这里是求总天数。
        {
            if(leap(year)==1)
                sum+=366;
            else sum+=365;
            year++;
        }
        if(b==1 && month>2)                            //这里排除虽然第一年和最后一年虽然是润年,但生日,不符合要求的,减去多余一天。
            sum-=1;
       if(d==1 && (month>2))
            sum+=1;

        printf("%d\n",sum);
    }
    return 0;
}

楼主思路是正确的。但是最后一个判断出了点错误。当18岁时,你在for循环里是year+17,不是year+18,所以当year+18是闰年,且大于2月份时,这个时候比sum多了一天。
2010-08-02 16:48
conquerorbzm
Rank: 2
等 级:论坛游民
帖 子:35
专家分:33
注 册:2010-7-23
收藏
得分:0 
谢谢版主,哎!这鸟题就是容易错啊!以后会更仔细更严谨的,谢谢你拉。
2010-08-02 17:14
AKBayonet
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-6-8
收藏
得分:0 
#include<stdio.h>
int main()
{
    int year,month,i,day,sumday=0,t;
    scanf("%d",&t);
    while(t--)
    {
        sumday=0;
        scanf("%d-%d-%d",&year,&month,&day);
        sumday+=18*365;
        for(i=year;i<=(year+18);i++)
            if((i%4==0&&i%400!=0)||(i%400==0))
                sumday++;
        if(month==2&&day==29)
        {
            printf("-1\n");
            continue;
        }
        if((year%4==0&&year%400!=0)||(year%400==0))
            if(month>2)
                sumday-=1;
        year+=18;
        if((year%4==0&&year%400!=0)||(year%400==0))
            if(month<=2)
                sumday-=1;
        printf("%d\n",sumday);
    }
    return 0;
}
这个代码哪里错了 ?? 求解
2013-06-08 18:37
快速回复:杭电1201(18岁生日)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013899 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved