很简单的题大家来看看错了哪里
pascal吧
全部回复
仅看楼主
level 3
输入一个数组,将数组的负数都放在正数的左边,输出新数组和交换次数
为何爆0
var n,i,j,t,ans:integer; a:array[1..1000] of integer;
begin
readln(n);
for i:=1 to n do read(a[n]); i:=1; j:=n;
repeat
while a[i]<0 do inc(i);
while a[j]>0 do dec(j);
if i<j then
begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); inc(ans);end;
until i=j;
for i:=1 to n do write(a[i]:3);
writeln; writeln(ans);
end.
2013年12月31日 12点12分 1
level 9
新手常见错误,读入时循环控制变量是i,相应的数据也要用a[ i ],而不是a[ n ]。
2013年12月31日 12点12分 2
用i>=j结束
2013年12月31日 12点12分
回复 lsdzyl :为何..i=j不是已经足够了吗...
2013年12月31日 13点12分
如果这个数组的元素个数是双数就没有一个中点,而且有可能的情况下可能出现还没进行循环条件判断就已经i>j了所以i>=j更为保险。
2014年01月05日 06点01分
1