帕斯卡问题:智力冲浪

先排序时,用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);