code第一部分数组:第二十一题:分糖果

code第一部分数组:第二十一题:分糖果

给糖果,每人至少一颗,高分孩子得到比左右多,求糖果数。
there are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
• Each child must have at least one candy.
• Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?

#include <iostream>

using namespace std;

int max(int a,int b)
{
    if (a>=b)
    {
        return a;
    }
    else
        return b;
}

int candy(int* ratings,int n)
{
    int result=0;

    const int m=n;
    int increment[m];

    for (int i = 1; i < n; i++)
    {
        if (ratings[i] > ratings[i-1])
        {
            increment[i] = increment[i-1]+1;
            cout<<"increment[i]"<<increment[i]<<endl;
        }
        else
        {
            increment[i] = 1;
            cout<<"increment[i]"<<increment[i]<<endl;
        }
    }

    for (int i = n - 2; i >= 0; i--)
    {
        if (ratings[i] > ratings[i + 1])
        {
            increment[i] =max(increment[i+1]+1,increment[i]);
            cout<<"increment[i]"<<increment[i]<<endl;
        }
        else
        {
            increment[i]= 1;
            cout<<"increment[i]"<<increment[i]<<endl;
        }
    }

    for (int i = 0; i < n; i++)
    {
        result += increment[i];
    }

    return result;
}

int main()
{
    int a[5]={1,3,2,4,5};

    int ans = candy(a,5);

    cout<<"at least candy number is "<<ans<<endl;

    return 0;
}
原文地址:https://www.cnblogs.com/tao-alex/p/6443063.html