| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 675 人关注过本帖
标题:杭电1202
只看楼主 加入收藏
conquerorbzm
Rank: 2
等 级:论坛游民
帖 子:35
专家分:33
注 册:2010-7-23
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:5 
杭电1202
杭电1202
 悬赏分:5 - 离问题结束还有 11 天 13 小时
各位高手谁能帮帮我,为什么我编的的这道题总是Output Limit Exceeded,
帮忙告诉下我原因,我纠结蛮久啦!谢谢!


#include"stdio.h"
int main()
{
 int jd(int x);
 int i,t,a[1000],b[1000],sum,e,f;
 while(scanf("%d",&t)!=EOF)
 { sum=0;e=0;f=0;
  for(i=0;i<t;i++)
   scanf("%d%d",&a[i],&b[i]);
  for(i=0;i<t;i++)
  {
   if(b[i]!=-1)
   { sum+=a[i]*jd(b[i]);
    f+=a[i];
   }
   else e++;
  }
  if(e==t)
   printf("-1\n");
  else
   printf("%.2f\n",(float)sum/f);
 }
 return 0;
}
 int jd(int x)
 {
  int d;
  if(x>=90)
   d=4;
  else if(x>=80)
   d=3;
  else if(x>=70)
   d=2;
  else if(x>=60)
   d=1;
  else
   d=0;
  return(d);
 }
搜索更多相关主题的帖子: 悬赏分 
2010-07-30 08:22
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:1 
gcc表示没有问题,还有,这程序到底是干嘛的= =?

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2010-07-30 08:51
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:9 
题目里明确说了:每行有两个实型的数 s,p。而你用的是整形,如果读入小数的化会造成无限循环,输出一堆当然就OLE
改成如下:
程序代码:
#include"stdio.h"
int main()
{
int jd(int x);
int i;
double t,a[1000],b[1000],sum,e,f;
while(scanf("%lf",&t)!=EOF)
{ sum=0;e=0;f=0;
  for(i=0;i<t;i++)
   scanf("%lf%lf",&a[i],&b[i]);
  for(i=0;i<t;i++)
  {
   if(b[i]!=-1)
   { sum+=a[i]*jd(b[i]);
    f+=a[i];
   }
   else e++;
  }
  if(!sum)
   printf("-1\n");
  else
   printf("%.2lf\n",sum/f);
}
return 0;
}
int jd(int x)
{
  int d;
  if(x>=90)
   d=4;
  else if(x>=80)
   d=3;
  else if(x>=70)
   d=2;
  else if(x>=60)
   d=1;
  else
   d=0;
  return(d);
}
另外我认为你的算法应该是正确的,但是貌似标程认为只要学分合为0,就输出-1。而你的就不对了,这里似乎是有些问题。
另附我写的:
程序代码:
#include <stdio.h>
int main(void)
{
    int N;
    double S, P, sS, SP;
    while(scanf("%d", &N) == 1)
    {
        SP = 0; sS = 0;
        while(N--)
        {
            scanf("%lf%lf", &S, &P);
            if(P!=-1)
            {
                switch((int)P/10)
                {
                    case 10:
                    case 9: SP += S*4;break;
                    case 8: SP += S*3;break;
                    case 7: SP += S*2;break;
                    case 6: SP += S;break;
                    default: ;
                }
            sS += S;
            }
        }
        if(sS)
            printf("%.2lf\n", SP/sS);
        else
            puts("-1");
    }
    return 0;
}



[ 本帖最后由 playmyself 于 2010-7-30 10:07 编辑 ]

无聊创造奇迹。
2010-07-30 10:05
conquerorbzm
Rank: 2
等 级:论坛游民
帖 子:35
专家分:33
注 册:2010-7-23
收藏
得分:0 
回复 3楼 playmyself
太感谢了,这问题自己找了好久就是没找出来。果然是高手啊!恩,细节以后会更加注意的,再次谢谢你!
2010-07-30 21:43
conquerorbzm
Rank: 2
等 级:论坛游民
帖 子:35
专家分:33
注 册:2010-7-23
收藏
得分:0 
回复 2楼 Rexfield
也谢谢你,主要是题目太长啦,我就没粘上去了。这时杭电的题目,我们在集训,整天做这鬼题。
2010-07-30 21:50
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
害人的题目。我讨厌做这些题目,因为时常出会莫名其妙的错。嘿嘿,水平太菜,就怪题目。
2010-07-30 21:57
快速回复:杭电1202
数据加载中...
 
   



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

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