| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:求助,生日问题。怎么输出都是同一个答案
只看楼主 加入收藏
wzmtysdm263
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
求助,生日问题。怎么输出都是同一个答案
输入

输入一个数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;
    }
}
搜索更多相关主题的帖子: 生日 测试 include 
2011-11-26 14:14
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:5 
正确的输出啊!没什么错误

最基础的往往是你最容易忽略的!
2011-11-26 14:31
wzmtysdm263
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-26
收藏
得分:0 
如果输入是1998 03 03
应该输出是 -1  
可是不是
2011-11-26 14:36
keaixiaou
Rank: 2
等 级:论坛游民
帖 子:9
专家分:21
注 册:2011-11-23
收藏
得分:5 
if((x%4==0)&&(x%100!=0)||(x%4000==0))
->if(((x%4==0)&&(x%100!=0))||(x%400==0))

2011-11-26 14:45
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:5 
那就在if语句里加个语句
改成if(judge(y)&&!judge(y+17)&&m==2&&d==29||(y+17)>2011)试试
2011-11-26 14:47
wzmtysdm263
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-26
收藏
得分:0 
也是不行啊
2011-11-26 15:25
wzmtysdm263
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-26
收藏
得分:0 
弄了个这个
也是不行
就是输出不了-1
如果输入是2000 03 03
按道理应该是输出-1的  可是不是
#include "stdio.h"
#include "stdlib.h"
int isLeapYear (int y)
{
    if ( (y % 4 == 0 && y % 100 != 0) || y % 100 == 0)
        return 1;
    else
        return 0;
}
/* Compare 2 dates. */
int daycmp (int month1, int day1, int month2, int day2)
{
    if (month1 > month2)
        return 1;
    else if (month1 < month2)
        return -1;
    else
    {
        if (day1 == day2)
            return 0;
        else return ((day1 > day2) ? 1 : -1);
    }
}
int main ()
{
    int nd,nm,ny;
    int day, month, year; /* Keep the input date */
    int *sum;  /* No. of days to age of 18 */
    int i,j,date_count;
    scanf ("%d", &date_count);
    sum = (int *) malloc (sizeof (int) * date_count);
    for (i = 0; i < date_count; i++)
        sum[i] = 0;
    for (i = 0; i < date_count; i++)
    {
        scanf ("%d%d%d", &year, &month, &day);
        if ( (daycmp(month, day, 2, 29) == 0)
            && !isLeapYear(year + 17) )
        {
            sum[i] = -1;
            continue;
        }
        else {
            for ( j = 0; j < 17; j++)
            {            
                if (daycmp (month, day, 2, 29) < 0)
                {
                    sum[i] += (isLeapYear ( year + j )) ? 366 : 365;
                }
                else if (daycmp (month, day, 2, 29) > 0 )
                {
                    sum[i] += (isLeapYear ( year + 1 + j )) ? 366 : 365;
                }
                else sum[i] += 365;
            }
        }
    }
    for (i = 0; i < date_count; i++)
    {
        printf ("%d\n", sum[i]);
    }
    return 0;
}
2011-11-26 15:54
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:5 
程序代码:
#include <stdio.h>

#define N 17

int is_leap( int t )
{
    return ( ( t % 4 == 0 && t % 100 != 0 ) || t % 400 == 0 ) ;
}

int main()
{
    int Total , y , m , d , sum , i ;
    scanf("%d" , &Total ) ;

    while( Total-- )
    {
        scanf("%d%d%d", &y , &m , &d ) ;

        if( is_leap( y ) && m == 2 && d == 29 && !is_leap( y + N ) )
        {
            printf("-1\n") ;
            continue ;
        }

        sum = 365 * N ;
        if( m < 3 && is_leap( y ) ) sum += 1 ;

        for( i = y + 1 ; i < y + N ; ++i )
        {
            if( is_leap( i ) )
            {
                sum += 1 ;
            }
        }

        if( is_leap( i ) && m >= 3 ) sum += 1 ;

        printf("%d\n", sum ) ;
    }
    return 0 ;
}        
2000 03 03 为什么是-1?
2011-11-26 18:24
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
这个输1998 03 03也不行?
程序代码:
#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;   
        temp=0;
        scanf("%d %d %d",&y,&m,&d);
        if(judge(y)&&!judge(y+17)&&m==2&&d==29||(y+17)>2011)
            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))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
2011-11-26 19:39
wzmtysdm263
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-26
收藏
得分:0 
-1 代表他到现在都没有满17岁
2011-11-26 21:04
快速回复:求助,生日问题。怎么输出都是同一个答案
数据加载中...
 
   



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

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