均分纸牌pascal程序
题意
有n堆纸牌,通过把牌移到另一堆,使每一堆的纸牌数相等。
分析
在编号为
1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
const
maxn=100;
var
a:array[0..maxn]of longint;
p,n,i,step:longint;
procedure init;
var
i:longint;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
p:=p+a[i];
end;
p:=p div n;
step:=0;
end;
procedure fs;
var
k,i,j:longint;
begin
for k:=1 to n do
a[k]:=a[k]-p;
i:=1;j:=n;
while (a[i]=0)and(i<n) do inc(i);
while (a[j]=0)and(j>1) do dec(j);
while (i<j) do
begin
a[i+1]:=a[i]+a[i+1];
a[i]:=0;
inc(step);
inc(i);
while (a[i]=0)and(i<j) do inc(i);
end;
end;
begin
init;
fs;
write(step);
end.