本文最后更新于192 天前,其中的信息可能已经过时,如有错误请发送邮件到1729915388@qq.com
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
输入:第一次输入表示孩子的个数,第二次输入一个数组表示孩子的评分
输出:最少糖果数目
#include<stdio.h>
#define N 20
int candy(int* ratings, int ratingsSize) {
int ret = 1;
int inc = 1, dec = 0, pre = 1;
for (int i = 1; i < ratingsSize; i++) {
if (ratings[i] >= ratings[i - 1]) {
dec = 0;
pre = ratings[i] == ratings[i - 1] ? 1 : pre + 1;
ret += pre;
inc = pre;
} else {
dec++;
if (dec == inc) {
dec++;
}
ret += dec;
pre = 1;
}
}
return ret;
}
int main(){
int ratings[N];
int ratingsSize;
scanf("%d",&ratingsSize);
for(int i=0;i<ratingsSize;i++){
scanf("%d",&ratings[i]);
}
printf("%d",candy(ratings,ratingsSize));
return 0;
}