1.定义一个vector数组,向里面赋值。然后去除数组末尾的负数。如果全是负数,找到最大的。然后从头相加,直到和为负数,,并重新开始累积和,并随时与当前最大值比较。

2.源代码

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

void main()
{
    vector <int> Array;       //声明vector数组。
    int temp = 0;    //用于输入。
    int sum = 0;    //储存当前最大和。
    int max = 0;    //储存最大和。
    cout << "请输入几个整数(用空格隔开,以字符结束)" << endl;
    while(cin >> temp)
    {
        Array.push_back(temp);    //将数字进栈到Array中。
    }
    if(Array[Array.size() - 1] < 0)
    {
        max = Array[Array.size() - 1];
    }
    while(Array[Array.size() - 1] < 0)    //去除数组末尾的负数。如果全是负数,找到最大的。
    {
        if(max <= Array[Array.size() - 1])
        {
            max = Array[Array.size() - 1];
        }
        Array.pop_back();
        if(Array.size() == 0)
        {
            cout << "最大子数组和为:" << max << endl;
            return;
        }
    }
    for(int i = 0;i < Array.size();i++)
    {
        if(sum < 0)    //如果当前数组和小于零,重置sum。
        {
            sum = 0;
        }
        else
        {
            sum += Array[i];
        }
        if(sum > max)    //当前和与最大值比较。
        {
            max = sum;
        }
    }
    cout << "最大子数组和为:" << max << endl;
    vector<int>().swap(Array);    //释放vector数组。
}

3.结果截图

posted on 2016-04-08 17:56  消失。  阅读(347)  评论(0编辑  收藏  举报