Divide the Cards(均分纸牌)

1、question:

    有N堆纸牌,编号分别为1,2,…,n。每堆上有若干张,但纸牌总数必为n的倍数.可以在任一堆上取若干张纸牌,然后移动。移牌的规则为:在编号为1上取的纸牌,只能移到编号为2的堆上;在编号为n的堆上取的纸牌,只能移到编号为n-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

2、code:

#include

#include
using namespace std;
int n,a[10005],sum,ave,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
ave=sum/n;
for(int j=1;j {
if(a[j]!=ave)
{
a[j+1]-=(ave-a[j]);
a[j]=ave;
ans++;
}
}
cout< return 0;

}

3、running

Divide the Cards(均分纸牌)_第1张图片

你可能感兴趣的:(C++)