帕斯卡问题:智力冲浪
先排序时,用M替换会覆盖M的原值,改为t。
从前到后扫描,一次a[I]>;B[i]是move,下次扫描要从I开始继续,所以这里不好用for循环,while比较好用;我对程序做了一些改动:
程序zldcl
变量a,b,c:数组[1..500]的整数;
m,n,I,j,x,s,t:整数;
f1,f2:文本;
过程移动(s:整数);//
var i,j,g,h:整数;
开始
g:= c[1];
for i:=1 to s do
如果c[I]& lt;g然后开始g:= c[I];h:= I;结束;
m:= m-g;
for j:= h to n do begin b[j]:= b[j+1];c[j]:= c[j+1];结束;//
十二月(日);//
结束;
开始
assign(f1,' in . txt ');
复位(f 1);
读(f1,m);读(f1,n);
对于i:=1到n do
开始
a[I]:= I;
读(f1,b[I]);
结束;
对于i:=1到n do read(f1,c[I]);
关闭(f 1);
s:= n;
对于i:=1到n-1 do
for j:=i to n do
如果b[I]& gt;=b[j]那么
开始
t:= b[I];b[I]:= b[j];b[j]:= t;
t:= c[I];c[I]:= c[j];c[j]:= t;
结束;
//for I:= n down to 1 do if a[I]& gt;b[i]然后移动;
I:= 1;//
而我& ltn do //
begin //
如果a[I]& gt;b[i]然后移动(i) //
else公司(一);//
结束;//
assign(f2,' out . txt ');
重写(F2);
写(f2,m);
关闭(F2);