c++蓝桥杯2022.3:分糖果(贪心算法)

编程实现:分糖果
题目描述:
有 个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是  的倍数计算出最少调整几次可以使每个小朋友的糖果数量相同。调整规则如下:
规则 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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值