noip(pascal)普及组2007第一题

2025-06-22 12:03:16
推荐回答(2个)
回答1:

LZ,有没有搞错,是2006的吧!是不是明明的随机数,是的话,我告诉你。
你的这种排序我在书上见过,但我一般不用这种排序。
我的程序如下:
var n,i,j,t,s:longint;a:packed array[1..10000] of integer;
begin
readln(n);for i:=1 to n do read(a[i]);s:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
for i:=2 to n do if a[i]=abs(a[i-1]) then a[i]:=-a[i];
for i:=1 to n do if a[i]>0 then inc(s);writeln(s);
for i:=1 to n do if a[i]>0 then write(a[i],' ');writeln;
end.
至于你的错误,如下:
1:你的排序过程s,在主程序中没有调用,数组没有进行排序。
2:你怎么读入了两次n。
3:主程序第7行,for循环语句到n-1就可以了,因为下面if语句中用到了i+1。
总之你这么做不行,你的风格和思路和我的不太一样,所以有可能改错,这一点请见谅,但我的程序绝对正确,而且是我自己写的,你可以拿去参考一下。

回答2:

少一个end。。。

最后那里应该改成:
if a[i]<>-1 then write(a[i],' ')比较好。。