pascal题目为什麽会 runtime error

输入N个学生的分数判断出现次数最多的分数如果超过1个分数要由小到大我的程序我compile完全正确N<=100000programtask1013;varn,i,l,w:... 输入N个学生的分数 判断出现次数最多的分数 如果超过1个分数 要由小到大
我的程序 我compile 完全正确
N<=100000
program task1013;
var
n,i,l,w:longint;
temp:real;
final,score:array[1..1000] of real;
high:array[1..1000] of boolean;
output:array[1..1000] of longint;
begin
w:=1;
readln(n);
for i:=1 to n do
read(score[i]);
for i:=1 to n do
begin
for l:=1 to n do
if score[i]=score[l] then begin
inc(output[i])
end;
dec(output[i]);
end;
for i:=1 to n do
begin
high[i]:=true;
for l:=1 to i-1 do
if output[i]<output[l] then high[i]:=false;
for l:=i+1 to n do
if output[i]<output[l] then high[i]:=false;
end;
for i:=1 to n do
if high[i]=true then
begin
final[w]:=score[i];
inc(w);
end;
for i:=1 to w-2 do
for l:=2 to w-1 do
if final[i]>final[l] then begin
temp:=final[l];
final[l]:=final[i];
final[i]:=temp;
end;
for i:=1 to w-1 do
writeln(final[i]:2:2);
end.
展开
 我来答
hackpascal
2011-08-12 · TA获得超过185个赞
知道小有建树答主
回答量:69
采纳率:0%
帮助的人:97.6万
展开全部
你用的是什么编译软件?Turbo Pascal 还是 Delphi?
此代码在 Turbo Pascal 下编译运行都正常,Delphi 下运行出现 Runtime error 6 at XXXXXXXX。
如果在 Delphi 下编译,请在 program task1013; 的下面添加一句 {$APPTYPE CONSOLE}
{$APPTYPE CONSOLE} 的作用是是程序编译为控制台应用程序,只有控制台程序才能直接使用 Read 和 Write 过程。
Runtime error 6 是 I/O 错误。

补充:
你的 N<=100000, 但 score 的下标范围为 1..1000,当 N=1001 时,访问 score[N]就可能出现 runtime error(内存违例访问或写入),把
final,score:array[1..1000] of real;
high:array[1..1000] of boolean;
output:array[1..1000] of longint;
改为
final,score:array[1..100000] of real;
high:array[1..100000] of boolean;
output:array[1..100000] of longint;

这种算法很复杂,建议用链表。
&#xA4B0;&#x098C;夏枳&#x2075;&#x00B2;&#x00BA;&#x0ED2;&#xA4B1;
2011-08-13 · TA获得超过242个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:147万
展开全部
晕死 链表 ... 数组 数组太小了 就会那个错误
而且 为什么不用快排呢 if a[i]=a[i+1] then if b[len].val<>a[len] then begin inc(len); b[len].val:=a[i]; b[len].num:=2 else inc(b[len].num);
for i:=1 to len do ...找MAX
for i:=1 to len do if b[i].num=max then write(b[i].val,' ');
... orz
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bf6f5b9
2011-08-12 · TA获得超过5821个赞
知道大有可为答主
回答量:2542
采纳率:100%
帮助的人:2615万
展开全部
for i:=1 to n do
begin
for l:=1 to n do
if score[i]=score[l] then begin
inc(output[i])
end;

这个。。循环有点多
当n=100000,就得循环10^12。。。肯定会超时
追问
runtime error 不是只超時吧..
追答
=。=我只是大致看了下。。。按编译看错误提示的数字是几。。然后去对照错误对照表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式