序列中返回奇數、偶數個別相加後,取最大值,負值為-1

彼特喜歡吃餅乾。 他的餅乾罐裡有 N 塊餅乾。

彼特在每個cookie ai​中定義了“delicious-value”dv​,表示cookie的美味程度。dvious-value範圍應該在0到100之間。

彼特把餅乾罐裡的每一塊餅乾從左到右排好,決定在奇數或偶數的位置吃餅乾,但他也想擁有能讓他開心的最大美味價值。

但是彼特數學不好,所以他要你寫一個函數來幫助他。

給你一個包含N個值的序列,代表N個餅乾的美味價值。你應該實現下面的函數,讓彼特知道怎麼吃餅乾才能有更多的美味價值。

範圍:
​array:美味值的序列,序列ai的每個元素應該在0到100之間。

返回:
你應該在奇數位置求和,調用to,在偶數位置調用te,返回to和te之間的最大美味值,即max⁡(to,te)
​如果序列有任何無效值,或者 cookie 的數量為負數,則應返回 -1。

例1
max_dv(4, {1, 2, 3, 4})
輸出:6
在序列[1,2,3,4]中,奇數位置的總美味值dv為to=1+3=4,偶數位置為te=2+4=6
因此,您應該返回 to​ 和 te​ 之間的最大值,即 6。

例2
max_dv(4, {1, -3, 3, 4})
輸出:-1
在序列[1,−3,3,4]中,第2個cookie a2​中的delicious值為負值,即不在0到100之間。
因此,您應該返回 -1。

例3
max_dv(-4, {1, -3, 3, 4})
輸出:-1
餅乾的數量N是負值-4。
因此,您應該返回 -1。

求奇数位、偶数位的和,求最大值即可。
输入是max_dv(4,{})这样的样式吗?还是直接输入数字?两种方式都写了,你自己选用即可。
(1)直接输入数字的方式:

img

代码:

#include <iostream>
using namespace std;

int to(int a[],int n)
{
    int sum = 0;
    for(int i=0;i<n;i+=2)
        sum += a[i];
    return sum;
}

int te(int a[],int n)
{
    int sum = 0;
    for (int i=1;i<n;i+=2)
        sum += a[i];
    return sum;
}


int max_dv(int a[],int n)
{
    int s1 = te(a,n);
    int s2 = to(a,n);
    if(s1>s2) return s1;
    else return s2;
}

int main()
{
    int n;
    int *array;
    cin >> n;

    if(n<0)
    {
        cout <<"-1";
        return 0;
    }
    array = new int[n];
    for(int i =0;i<n;i++)
    {
        cin >> array[i];
        if(array[i]<0 || array[i]>100)
        {
            cout <<"-1";
            delete[] array;
            return 0;
        }
    }
    cout << max_dv(array,n);
    return 0;
}

(2)按照max_dv(4,{})的方式输入:

img

img

代码:

#include <iostream>
using namespace std;

int to(int a[],int n)
{
    int sum = 0;
    for(int i=0;i<n;i+=2)
        sum += a[i];
    return sum;
}

int te(int a[],int n)
{
    int sum = 0;
    for (int i=1;i<n;i+=2)
        sum += a[i];
    return sum;
}


int max_dv(int a[],int n)
{
    int s1 = te(a,n);
    int s2 = to(a,n);
    if(s1>s2) return s1;
    else return s2;
}

int main()
{
    int n;
    int *array;
    char ch;
    //过滤前7个字符
    for(int i=0;i<7;i++)
        cin >> ch;
    cin >> n;//读取n

    if(n<0)
    {
        cout <<"-1";
        return 0;
    }

    //读取,{
    cin>>ch>>ch;
    array = new int[n];
    for(int i =0;i<n;i++)
    {
        cin >> array[i];
        cin >> ch; //吸收,
        if(array[i]<0 || array[i]>100)
        {
            cout <<"-1";
            delete[] array;
            return 0;
        }
    }
    cout << max_dv(array,n);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^