贪心法经典题目——孩子分糖

这道题目要求在给定评分的孩子中分配糖果,确保评分高的孩子获得更多的糖果,每个孩子至少一个。通过贪心算法,可以实现两次遍历来解决此问题:首次从左到右遍历,若右侧孩子评分更高,则其糖果数加1;然后从右到左遍历,若左侧孩子评分高但糖果数少于右侧,也增加糖果数。最终统计所有孩子的糖果数即为答案。
摘要由CSDN通过智能技术生成

先看题目:

题目描述:

一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。

这道题用贪心算法来做将变得非常简单

我们只需要简单的两次遍历:先定义一个结构体数组Child,定义孩子的分数及分到的糖果两个变量,把所有孩子的糖果数初始化为 1;首先我们用一个for循环从左往右遍历,如果右边孩子的分数高于左边,那么我们将右边孩子的糖果数改为左边孩子的糖果数加 1;接下来我们用for循环从右往左遍历一遍,如果左边孩子的评分数比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,那么将左边孩子的糖果数改为右边孩子的糖果数加 1。两次遍历后,孩子的糖果数就满足题目要求了。最后再将孩子的糖果数都加起来输出则Ok啦

接下来上代码:

#include<iostream>
#define NUM 50

using namespace std;

int main(void){
   
	
	struct Child {
   
		int score;
		in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值