C语言:数组中相邻元素持续相加,求其最大值!

例:
输入:{-3,1,4,-2,5,-9}
输出:{1,4,-2,5}

/**
设数组元素为n, 那么此序列的长度, 会>=1, 且<=n.
如果最大元素为m, 那么此序列的和肯定>=m。
如果m的值>0, 此序列的头和尾的值都>0。
如果m的值<=0,则此序列就是元素m本身。
**/
#include <iostream>
using namespace std;
int main()
{
    int arr[10]={1,5,-7,3,2,-7,4,-1,-1,2};
    int i=0,index=0,index_max=0,len=0,len_max=0;
    int sum=0,sum_max=0;
    int max_arr = arr[0], max_arr_index = 0;;
    for(i=0; i<10; i++)
    {
        if(max_arr<arr[i]) // 获取所有数值中的最大值
        {
            max_arr = arr[i];
            max_arr_index = i;
        }

        sum+=arr[i];
        if(sum<0)
        {
            index = i+1;
            sum = 0;
            len = 0;
        }
        else
        {
            len++;
        }
        if(sum_max<sum)
        {
            sum_max = sum;
            index_max = index;
            len_max = len;
        }
    }
    if(max_arr <= 0)
    {
        sum_max = max_arr;
        index_max = max_arr_index;
        len_max = 1;
    }
    //cout<<sum_max<<endl<<index_max<<endl<<len_max<<endl;
    cout << "sum_max = " << sum_max << endl;
    for(i=index_max;i<len_max;i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Acoolbest/article/details/70915170