[2002年NOIP提高组] 均分纸牌

[2002年NOIP提高组] 均分纸牌

思路:贪心算法。将n堆纸牌的平均数算出来,将每堆纸牌i与平均数的差值转到i+1堆纸牌上,每操作一步,计数器+1。最后输出操作步数就好。

代码如下:

#include<iostream>

using namespace std;

int a[10010];

int main()

{

      int n;

      cin>>n;

      int ave=0,step=0;

      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)//这个数>平均数

           {

                 step++;

                 a[i+1]+=a[i]-ave;//后面的数+多余的

           }

           if(a[i]<ave)//这个数<平均数

           {

                 step++;

                 a[i+1]-=ave-a[i];//后面的数-少了的

           }

      }

      cout<<step<<endl;

      return 0;

}

posted @ 2022-08-16 11:39  shanyingrui  阅读(46)  评论(0编辑  收藏  举报