bol_in 2022-10-04 18:04 采纳率: 64.6%
浏览 29

序列中返回奇數、偶數個別相加後,取最大值,負值為-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。

  • 写回答

2条回答 默认 最新

  • 关注

    求奇数位、偶数位的和,求最大值即可。
    输入是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;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月4日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络