均分纸牌pascal程序

来源:互联网 发布:专业服装设计软件 编辑:程序博客网 时间:2024/04/29 21:11

题意

有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.


0 0
原创粉丝点击