| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 620 人关注过本帖
标题:一道第几天的C编程问题
只看楼主 加入收藏
a502191900
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-11-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
一道第几天的C编程问题
某道题的题目是这样的
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12

Sample Output
20
71
我的代码:
#include<stdio.h>
int main()
{
    int year,month,day;
    int s=0,sum=0,i;
   
    while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
    {
        if(!((year%4==0&&year%100!=0)||year%400==0))
        {
            for(i=0;i<month;i++)
            {
            switch(i)
            {
            case 12: s=31;break;
            case 11: s=30;break;
            case 10: s=31;break;
            case  9: s=30;break;
            case  8: s=31;break;
            case  7: s=31;break;
            case  6: s=30;break;
            case  5: s=31;break;
            case  4: s=30;break;
            case  3: s=31;break;
            case  2: s=28;break;
            case  1: s=31;break;
            default :break;
            }
            sum+=s;
        }
        printf("%d\n",sum+day);
    }
    else
    {
        for(i=0;i<month;i++)
        {
            switch(i)
            {
            case 12: s=31;break;
            case 11: s=30;break;
            case 10: s=31;break;
            case  9: s=30;break;
            case  8: s=31;break;
            case  7: s=31;break;
            case  6: s=30;break;
            case  5: s=31;break;
            case  4: s=30;break;
            case  3: s=31;break;
            case  2: s=29;break;
            case  1: s=31;break;
            default :break;
            }
            sum+=s;
        }
        printf("%d\n",sum+day);
    }
   
    }
   
}
为什么答案是错误的。。 = =好郁闷啊...在一个hdu上做的,还有 能不能简化一下
搜索更多相关主题的帖子: include 
2012-11-14 19:16
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:5 
很好简化,你列出到每月时候已经过了多少天了就行了
例如
int mon【】={31,31+28,31+28+31……};
然后是
加上最后的天数,是闰年并且月份》2再加一天。

WE GO
2012-11-14 19:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
把s和sum的初始化放到while循环里的开始位置。

更简单的代码
程序代码:
#include<stdio.h>
int month[] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int main()
{
    int y, m, d;
    while(scanf("%d/%d/%d", &y, &m, &d) != EOF)
    printf("%d\n", d + month[m] + (m > 2 && (!(y % 4) && y % 100 || !(y % 400))));
    return 0;
}

重剑无锋,大巧不工
2012-11-14 19:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 2楼 cyhdahua
呵呵,还是他姐手快啊

重剑无锋,大巧不工
2012-11-14 19:36
a502191900
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-11-14
收藏
得分:0 
回复 3楼 beyondyf
谢谢
2012-11-14 19:51
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
回复 3楼 beyondyf
就只记住图片了

WE GO
2012-11-14 19:58
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 6楼 cyhdahua
小陈。你叫小陈(想起来了)。

重剑无锋,大巧不工
2012-11-14 20:09
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
嘻嘻
小陈向杨大哥问好了
祝你早日破城

WE GO
2012-11-14 20:22
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,我不急。现在有小曹和小戴帮忙,相信用不了太长时间。

我要先把1023的问题搞清楚。如果确认原题就有问题,那我对西电的兴趣将大减,它就不过是个没有价值的城池了。

重剑无锋,大巧不工
2012-11-14 20:31
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
可惜我现在能力有限,只能观战!!
希望再过俩三年也能助杨大哥一臂之力

WE GO
2012-11-14 20:39
快速回复:一道第几天的C编程问题
数据加载中...
 
   



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

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