OJ ACM的题目给定一个日期,输出这个日期是该年的第几天。

Zhngbn斌 2017-10-09 08:48:51
//2005
#include<stdio.h>
int main()
{
int years,months,days,i;
while(scanf("%d/%d/%d",&years,&months,&days))
{ if(years%4==0 && years%100!=0 || years%400)
{
int sum=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(i=0;i<months-1;i++)
sum+=a[i];
sum=sum+days;
printf("%d\n",sum);
}
else
{
int sum=0,a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
for(i=0;i<months-1;i++)
sum+=a[i];
sum=sum+days;
printf("%d\n",sum);

}
}
}
在编译器里输入了好多次都是可以没问题的,放在OJ里显示Output Limit Exceeded。感谢各位大佬们帮忙指点指点。谢谢~
...全文
1213 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
苛西 2019-02-17
  • 打赏
  • 举报
回复
while(scanf("%d/%d/%d",&years,&months,&days))
你这句是打算无限循环吗
自信男孩 2017-10-10
  • 打赏
  • 举报
回复
#include<stdio.h>

int main()
{
    int years,months,days,i;
    int sum=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    while(3 == scanf("%d/%d/%d", &years,&months,&days))
    {
        if (months > 12 || days > 31)
            continue;
        sum = 0;
        if((years%4==0 && years%100!=0) || years%400) {
            if (months > 2)
                sum = 1; /*1: leap year */
        }
        for(i=0;i<months-1;i++)
            sum += a[i];
        sum = sum + days;
        printf("%d\n",sum);
    }
    return 0;
}
年月日的范围需要做一下判断; 代码冗余太多,可以做进一步简化,详见上面修改的部分。 如果还有问题,可以进一步对年月日的范围做检测
kugeniha 2017-10-10
  • 打赏
  • 举报
回复
超时 。

69,336

社区成员

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

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