hdu2005 实在不知道怎么错了 求指导

IDJD_LPY 2016-12-08 01:01:28
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 y, m, d;
int a[] = { 31,28,31,30,31,30,31,31,30,31,30 };
while (scanf(" %d/%d/%d", &y, &m, &d) != EOF)
{
int x = 0, i;
if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0))
{
a[1] = a[1] + 1;
}
for (i = 0; i < m - 1; i++)
{
x = x + a[i];
}
x = x + d;
printf("%d\n", x);
}
return 0;
}
实在不知道怎么错了orz
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
IDJD_LPY 2016-12-08
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:

   a[1] = a[1] + 1;
这句修改是永久的。第一个闰年日期修正以后,后序的闰年日期再继续修正就全部是错的了。 程序中的 a 如果声明为 const,此类错误就很好抓了。
偶对 终于知道了 想了好久!! 谢谢指教!!
自信男孩 2016-12-08
  • 打赏
  • 举报
回复
#include<stdio.h>

int main(int argc, const char *argv[])
{
    int y, m, d;
    int a[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };    /* the length is 12 not 11 */
    while (scanf(" %d/%d/%d", &y, &m, &d) != EOF)
    {
        int x = 0, i;
        if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0))
        {
            a[1] = a[1] + 1;
        }
        for (i = 0; i < m - 1; i++)
        {
            x = x + a[i];
        }
        x = x + d;
        printf("%d\n", x);
    }
    return 0;
}
IDJD_LPY 2016-12-08
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
一年有12个月吧,你的数组a里只有11个元素
计算的时候是用不到第12月的天数,没必要定义了,12月几号是前十一个月天数再加上最后的“几号”
paschen 2016-12-08
  • 打赏
  • 举报
回复
一年有12个月吧,你的数组a里只有11个元素
ri_aje 2016-12-08
  • 打赏
  • 举报
回复

   a[1] = a[1] + 1;
这句修改是永久的。第一个闰年日期修正以后,后序的闰年日期再继续修正就全部是错的了。 程序中的 a 如果声明为 const,此类错误就很好抓了。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧