| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6642 人关注过本帖
标题:代码运行正确,结果也正确,但在OJ上提交时显示“答案错误”,所以想向各位 ...
只看楼主 加入收藏
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
结帖率:86%
收藏
已结贴  问题点数:20 回复次数:8 
代码运行正确,结果也正确,但在OJ上提交时显示“答案错误”,所以想向各位大神请教^_^
题目描述
输入年,月,然后告诉该月有多少天。
输入
输入只有一行,包括2个整数。之间用一个空格分开。
输出
输出只有一行(这意味着末尾有一个回车符号),包括1个整数。
样例输入
2000 2
样例输出
29
#include<stdio.h>
int main()
{
    long int year,month;int tian;
    scanf("%ld%ld",&year,&month);
    if(month<1||month>12)
    {
        printf("月份输入错误,请重新输入:");
        scanf("%ld",&month);
    }
    if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
        switch(month)
        {
            case 1:tian=31;break;
            case 2:tian=29;break;
            case 3:tian=31;break;
            case 4:tian=30;break;
            case 5:tian=31;break;
            case 6:tian=30;break;
            case 7:tian=31;break;
            case 8:tian=30;break;
            case 9:tian=31;break;
            case 10:tian=30;break;
            case 11:tian=31;break;
            case 12:tian=30;break;
        }
    else
        switch(month)
        {
            case 1:tian=31;break;
            case 2:tian=28;break;
            case 3:tian=31;break;
            case 4:tian=30;break;
            case 5:tian=31;break;
            case 6:tian=30;break;
            case 7:tian=31;break;
            case 8:tian=30;break;
            case 9:tian=31;break;
            case 10:tian=30;break;
            case 11:tian=31;break;
            case 12:tian=30;break;
        }
    printf("%d\n",tian);
}
搜索更多相关主题的帖子: include 
2016-02-22 16:37
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
年月用int就行了,scanf("%d%d",&year,&month); 闰年的判断条件是:能被4整除但不能被100整除,所以你后面的year%100==0&&year%400==0是多余的。还有long int year,month;int tian;这句请分两行写。
程序代码:
int main()
{
    int year,month,tian;

    scanf("%d%d",&year,&month);

    if(month!=2)
    {
        switch(month) //注意1,3,5,7,8,10,12为31天
        {
            case 1:tian=31;break;
            //case 2:tian=28;break;
            case 3:tian=31;break;
            case 4:tian=30;break;
            case 5:tian=31;break;
            case 6:tian=30;break;
            case 7:tian=31;break;
            case 8:tian=31;break;
            case 9:tian=30;break;
            case 10:tian=31;break;
            case 11:tian=30;break;
            case 12:tian=31;break;
        }
    }
    else
    {
        if((year%4==0)&&(year%100!=0))
        {
            tian=29;
        }
        else
        {
            tian=28;
        }
    }

    printf("%d\n",tian);

    return 0;
}


[此贴子已经被作者于2016-2-22 17:04编辑过]


   唯实惟新 至诚致志
2016-02-22 16:53
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:5 
楼上的,400整除的还是要加上。楼主主要是把8,9,10,11,12月天数搞错了
2016-02-22 17:15
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
回复 3楼 grmmylbs
好吧,我不太清楚,如果是那样改成下面那样。
程序代码:
        if((year%4==0)&&(year%100!=0))
        {
            tian=29;
        }
        else if((year%4==0)&&(year%400==0))
        {
            tian=29;
        }
        else
        {
            tian=28;
        }


[此贴子已经被作者于2016-2-22 17:34编辑过]


   唯实惟新 至诚致志
2016-02-22 17:29
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:5 
二月天数一个算式即可,无需那么多if:
28+(!(year%4)&&year%100)||year%400)
2016-02-23 07:55
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
如此说来,全年的每月天数也只需要一句代码即可获取,如下是显示2016年的每月天数,经验证正确:
程序代码:
#include <stdio.h>
int getday(int y,int m)
{
    return 30+(m<8)*m%2+(m>7)*(!(m%2))-(m==2)*(2-((!(y%4)&&(y%100))||!(y%400)));
}
    
int main()
{
    int i;
    for(i=1;i<13;i++)printf("%3d:%-3d\n",i,getday(2016,i));
}

能编个毛线衣吗?
2016-02-23 10:57
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
收藏
得分:0 
谢谢大家,你们提出的问题和改进办法非常有用,我已经改进了我的代码,判题系统已经通过了,再次谢谢大家~!

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-02-23 13:14
傻瓜都一样
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2016-1-7
收藏
得分:0 
程序代码:
#include <stdio.h>
#define MONTH 12
#define TRUE 1

int getday(int y, int m)
{
    return 30 + (m<8)*m % 2 + (m>7)*(!(m % 2)) - (m == 2)*(2 - ((!(y % 4) && (y % 100)) || !(y % 400)));
}

void main()
{
    unsigned int year,month,n = 0,day = 0;
    while (n != TRUE)
    {
        scanf("%ld%ld", &year, &month);
        if (month <= MONTH)
        {
            n++;
            day = getday(year, month);
            printf("%d年%d月有%d日\n ", year,month,day);
        }
        else
        {
            printf("输入的月份有错误,请重新输入!");
        }
    }
}

这样子判断会不会简单一点。。。
2016-02-23 17:05
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
收藏
得分:0 
回复 8楼 傻瓜都一样
确实感觉简单了一些,谢谢你的分享

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-03-01 13:16
快速回复:代码运行正确,结果也正确,但在OJ上提交时显示“答案错误”,所以想向 ...
数据加载中...
 
   



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

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