题解 P1031 【均分纸牌】
Tiger_Root · · 题解
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,ave = 0,step = 0,i,j;
int a[10005];
cin >> n;
for(i = 1; i <= n; i++){
cin >> a[i];
ave += a[i];//读入各堆牌张数,求总张数ave
}
ave /= n;//求牌的平均张数ave
for(i = 1; i <= n; i++)
a[i] -= ave;//每堆牌的张数减去平均数
i = 1;
j = n;
while(a[i] == 0 && i < n)
i++;//过滤左边的0
while(a[j] == 0 && j > 1)
j--;//过滤右边的0
while(i < j){
a[i + 1] += a[i];//将第i堆牌移到第i + 1堆中去
a[i] = 0;//第i堆牌移走后变为0
step++;//移牌步数计数
i++;//对下一堆牌进行循环操作
while(a[i] == 0 && i < j)
i++;//过滤移牌过程中的0
}
cout << step << endl;
return 0;
}