均分纸牌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.


posted @ 2017-01-13 10:11  银叶草  阅读(105)  评论(0编辑  收藏  举报
Live2D