[2002年NOIP提高组] 均分纸牌
- 分析:根据题意,先求所有数字的平均数,然后遍历数字与平均数比较,如果大于平均数,那么后一堆纸牌加上前一堆纸牌多出来的,同时步数+1,反之如果小于平均数,就用后一堆纸牌减去前一堆纸牌少的部分,步数+1,最后输出步数。
-
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[10001];
int main()
{
int n,ave=0,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
ave+=a[i];
}
ave/=n;//求平均数
for(int i=1;i<=n;i++)
{
if(a[i]>ave)
{
sum++;
a[i+1]+=a[i]-ave;//后一推牌加上前一堆牌剩余的
}
if(a[i]<ave)
{
sum++;
a[i+1]-=ave-a[i];
}
}
cout<<sum;
return 0;
}