编程实现:分糖果
题目描述:
有 个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是 的倍数计算出最少调整几次可以使每个小朋友的糖果数量相同。调整规则如下:
规则 1:每个小朋友的糖果只能调整到左右相邻的两个小朋友手中
规则2:第一个小朋友的糖果只能调整到第二个小朋友手中:
规则 3:最后一个小朋友的糖果,只能调整到倒数第二个小朋友手中糖要数量
例如:N 等于 3时,1~3 号小朋友原有糖果数量分别为6,4,2
1)1号小朋友拿出两块给 2 号小朋友;
2)2号小朋友拿出两块给 3 号小朋友;
两次操作后三个小朋友手中糖果分别为44,4。即按照调整规则最少操作 2 次可以使个小朋友手中糖果数量都相同
现按照顺序给出 1~N 号小朋友手中原有糖果数量,按照调整规则计算出最少调整几次可以使小朋友手中的糖果数量都相同。
输入描述:第一行输入一个正整数 N(N50),表示有 N 个小朋友第二行输入 N 个正整数(1<正整数<100),表示1到N 号小朋友手中原有糖果数量,正整数之间以一个空格隔开,且所有正整数之和是 N的倍数
输出描述:
输出一个正整数,表示按照调整规则最少调整几次可以使小朋友手中的糖果数量都相同
样例输入:
3
6 4 2
样例输出:
2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n],s=0,k=0;
for(int i=0;i<n;i++){
cin>>a[i];
s+=a[i];
}
for(int i=0;i<n;i++){
a[i]-=s/n;
}
for(int i=0;i<n;i++){
if(a[i]!=0){
a[i+1]=a[i+1]+a[i];
k++;
}
}
cout<<k;
return 0;
}