赞
踩
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
给定一个数组 arr 代表得分数组,请返回最少需要多少糖果。
- #include <stdio.h>
- #include <stdlib.h>
-
- int allocation(int *arr, int n){
-
- int *alloc = (int *)malloc(sizeof(int) * n);
-
- alloc[0] = 1;
- for (int i = 1; i < n; ++i) {
- if(arr[i] > arr[i-1]){
- alloc[i] = alloc[i-1] + 1;
- }else{
- alloc[i] = 1;
- }
- }
-
- for (int i = n-1; i >= 0; --i) {
- if(arr[i] < arr[i-1] && alloc[i] >= alloc[i-1]){
- alloc[i-1] = alloc[i] + 1;
- }
- }
-
- int sum = 0;
-
- for (int i = 0; i < n; ++i) {
- sum += alloc[i];
- }
-
- return sum;
-
- }
-
- int main(){
-
- int arr[8] = {4,1,6,4,10,9,5,1};
-
- int sum = allocation(arr, 8);
-
- printf("sum = %d\n",sum);
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。