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. 展开
我的程序 我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. 展开
展开全部
你用的是什么编译软件?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;
这种算法很复杂,建议用链表。
此代码在 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;
这种算法很复杂,建议用链表。
展开全部
晕死 链表 ... 数组 数组太小了 就会那个错误
而且 为什么不用快排呢 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
而且 为什么不用快排呢 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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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。。。肯定会超时
begin
for l:=1 to n do
if score[i]=score[l] then begin
inc(output[i])
end;
这个。。循环有点多
当n=100000,就得循环10^12。。。肯定会超时
追问
runtime error 不是只超時吧..
追答
=。=我只是大致看了下。。。按编译看错误提示的数字是几。。然后去对照错误对照表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询