求移动纸牌使每堆纸牌数量相等的最少次数
#include<bits/stdc++.h>
using namespace std;
int a[10000];
int main()
{
int n;
cin>>n;
double ave=0;
int step=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];ave=ave+a[i];
}
ave=ave/n; //求出每堆牌的平均数量
for(int i=1;i<=n;i++)
a[i]=a[i]-ave; //第i堆跟平均值差了多少,如果高于平均值则为正数,反之则为负数
int i=1,j=n;//从两侧开始过滤零(why)
while(a[i]==0&&i<n) i++;
while(b[j]==0&&j>1) j--;
while(i<j)
{
a[i+1]=a[i]+a[i+1];
a[i]=0;
step++;
i++;
while(a[i]==0&&i<j) //过滤移牌过程中产生的0,如果i=0,直接跳到下一个i;
i++;
}
return 0;
}