先看题目:
题目描述:
一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。
这道题用贪心算法来做将变得非常简单
我们只需要简单的两次遍历:先定义一个结构体数组Child,定义孩子的分数及分到的糖果两个变量,把所有孩子的糖果数初始化为 1;首先我们用一个for循环从左往右遍历,如果右边孩子的分数高于左边,那么我们将右边孩子的糖果数改为左边孩子的糖果数加 1;接下来我们用for循环从右往左遍历一遍,如果左边孩子的评分数比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,那么将左边孩子的糖果数改为右边孩子的糖果数加 1。两次遍历后,孩子的糖果数就满足题目要求了。最后再将孩子的糖果数都加起来输出则Ok啦
接下来上代码:
#include<iostream>
#define NUM 50
using namespace std;
int main(void){
struct Child {
int score;
in