希望粉丝破50.
我们在遍历上面这些数的时候,可以算出这些数的和从而算出平均值 。每个数只能有三种情况,第一种:大于平均值;第二种:小于平均值;第三种:等于平均值。我们将每一个数都变成平均值,那么最后一个数也必定是平均值。所以,我们可以这样:只要不是第三种情况,我们就可以吧超出或不够的部分用我们下一个要遍历的数拿、放。
贪心原则:从左往右
如果大于平均值就把大于平均值的部分向右移;
如果小于平均值就从右边那个数移去小于平均值的部分;
如果等于平均值就跳过,不累加;
最后如果遍历完了就输出累加器的数值。
有了这个,写代码就很简单了。
#include<bits/stdc++.h>
using namespace std;
int a[101]={};
int main()
{
int n;
cin>>n;
int s=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
s+=a[i];
}
int p=s/n;
int step=0;
for(int i=0;i<n;i++)
{
if(a[i]<p)
{
a[i+1]-=p-a[i];
a[i]=p;
step++;
}
if(a[i]>p)
{
a[i+1]+=a[i]-p;
a[i]=p;
step++;
}
}
cout<<step;
return 0;
}
欢迎评论,点个赞吧。
标签:遍历,平均值,纸牌,int,E5%,rsv,例题,贪心 From: https://blog.csdn.net/m0_72444271/article/details/140096659