C王之王 发表于 2008-6-20 21:42

Runtime Error问题 急。。。。

题目是:
输入:输入有多组,每组有2行,第一行是学生人数N(1<=N<10000),第二行有N个整数,分别表示每个学生的成绩(0到1e9)。当输入的N为0的时候结束程序。

输出:对于每组输入,输出只有一行,即第3名学生的成绩,如果找不到,则输出No such score !

这个是自己的程序 谁能告诉我为什么judge时出现Runtime Error的错误

急。。。。

#include<stdio.h>
#include<stdlib.h>
int main()
{
long int i,j,N,a[10000];
printf("请输入个数:\n");
scanf("%ld",&N);
while(N)
{printf("请输入成绩:\n");
for(i=0;i<N;i++)
scanf("%ld",&a[i]);
for(j=0;j<N;j++)
  {
    int k=0;
    for(i=0;i<N;i++)
    {
      if(a[j]<a[i])
      k++;
      if(k==3)
          break;
    }
    if(k==2)
    {
        printf("第三名成绩为%ld\n",a[j]);
        exit(1);
    }
}
printf("No such Score!\n");
return 1;
}
return 1;
}
[[it] 本帖最后由 C王之王 于 2008-6-20 21:46 编辑 [/it]]

[[it] 本帖最后由 C王之王 于 2008-6-20 21:52 编辑 [/it]]

StarWing83 发表于 2008-6-20 21:57

OJ?OJ不允许有任何额外输出的……

C王之王 发表于 2008-6-20 22:01

回复 2# StarWing83 的帖子

....那么那些printf里不要写那么多了?

StarWing83 发表于 2008-6-20 23:24

事实上,除了输出答案,你根本就不需要printf……

StarWing83 发表于 2008-6-20 23:25

输出:对于每组输入,输出只有一行,即第3名学生的成绩,如果找不到,则输出No such score !

C王之王 发表于 2008-6-21 08:53

回复 5# StarWing83 的帖子

改成这样还是Runtime Error错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
long int i,j,N,a[10000];
scanf("%ld",&N);
while(N)
{
for(i=0;i<N;i++)
scanf("%ld",&a);
for(j=0;j<N;j++)
  {
    int k=0;
    for(i=0;i<N;i++)
    {
      if(a[j]<a[i])
      k++;
      if(k==3)
          break;
    }
    if(k==2)
    {
        printf("%ld\n",a[j]);
        exit(1);
    }
}
printf("No such Score!\n");
return 1;
}
return 1;
}

StarWing83 发表于 2008-6-21 09:51

输入有多组,每组有2行,第一行是学生人数N(1<=N<10000),第二行有N个整数

while(scanf("%ld",&N)!=EOF)
{
for(i=0;i<N;i++)
scanf("%ld",&a[i]);
...

}

你确定不是抄的别的网站上的标程?只有网站上的程序才有可能掉了[i]这样的符号。而且题目明确指出,是每组输入都有两行。具体输入的方法已经给你了,你在...的地方自己补充算法好了。

StarWing83 发表于 2008-6-21 09:52

还有,N小于1e5,原则上不需要long。

C王之王 发表于 2008-6-21 10:18

回复 8# StarWing83 的帖子

恩。。谢了啊

StarWing83 发表于 2008-6-21 10:28

其实我很想知道……AC了没?

C王之王 发表于 2008-6-21 11:03

回复 10# StarWing83 的帖子

其实我很不忍心告诉你,还是没过,不过换了个程序过了。
#include <stdio.h>
int main( )
{
      long a,n,max,target,second;
      while(scanf("%ld",&n)!=EOF&&n>0)
      { max=second=target=-1;
        while(n--)
        { scanf("%ld",&a);  
          if(a>max)  {target=second;second=max; max=a;}
          else if(a>second&&a!=max) {target=second;second=a;}
          else if(a>target&&a!=second&&a!=max)  target=a;
         
        }
        if(target!=-1)
        printf("%ld\n",target);
        else
        printf("No such score !\n");
      }
}      
这个ER的问题 应该是非法访问内存 可还是搞不懂 这是没通过的程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
long int i,j,a[10000];
int N;
scanf("%d",&N);
while(N)
{
for(i=0;i<N;i++)
scanf("%ld",&a[i]);
for(j=0;j<N;j++)
  {
    int k=0;
    for(i=0;i<N;i++)
    {
      if(a[j]<a[i])
      k++;
      if(k==3)
          break;
    }
    if(k==2)
    {
        printf("%ld\n",a[j]);
        exit(1);
    }
}
printf("No such Score!\n");
return 1;
}
return 1;
}

StarWing83 发表于 2008-6-21 11:09

没过?你看黑书。随便抄个快速划分的算法嘛
这么简单的题目,不过对不起人- -

C王之王 发表于 2008-6-21 11:11

回复 12# StarWing83 的帖子

......学习别人的算法 ....自己的就是过不了.....

StarWing83 发表于 2008-6-21 11:32

OJ页面发来,我看看……

C王之王 发表于 2008-6-21 11:38

回复 14# StarWing83 的帖子

领旨。。。。 下午考完六级 要帮我解答哈
http://yzfy.org/bbs/redirect.php?tid=26&goto=lastpost#lastpost

页: [1]

编程论坛