洛谷p1301均分纸牌

原题网址
本题用的方式是在题解找到的,因为我看所有题解基本都是一个模子刻出来的,于是就想把它搞明白,本题的思路就是先算出来平均值,然后拿每一项和平均值比较,如果不相等的话就需要挪动牌,如果a[i]小于平均数,那么第二个数就要减去一个数(相当于从下一堆牌a[i+1]里面拿出来sum-a[i]张牌放到a[i]中,此时a[i]的值就是平均数,)如果等于平均数的话就不需要操作了,如果a[i]>平均值,那么就从牌里拿出来一些放到别的地方咯~ 代码实现:

#include<bits/stdc++.h>
using namespace std;
int num;
int a[1000];
int main() {
  int n,sum=0;
  cin>>n;
  for(int i=0;i<n;i++) {
    cin>>a[i];
    sum+=a[i];
  }
  int ave=sum/n;
  for(int i=0;i<n-1;i++) {
    if(a[i]!=ave) {
      num++;
      a[i+1]=a[i+1]+a[i]-ave;
    }
  }
  cout<<num;
}

猜你喜欢

转载自blog.csdn.net/weixin_43537190/article/details/84868640
今日推荐