整数数组中最大子数组求和01

程序思路:

1.假如a[i]前面的和小于0,就把暂存的和清0(因为负数+a[i]会把a[i]值拉低)

2.假如暂存的和大于最大和MaxSum,就将这个和给MaxSum(MaxSum储存子数组最大和)

3.如果MaxSum值为0,说明它的初始值一直没变过,即:没有正数!所以就找整个数组最大那个数

代码:

//返回一个整数数组中最大子数组的和
#include<iostream>
using namespace std;

int main()
{
    int sum = 0;//暂存的累加和
    int MaxSum=0;//最大子数组和
    int i,m=1;
    int *a=new int[m];//动态数组
    
    cout << "请输入数组个数\n";
    cin >> m;
    cout << "输入一个整数数组,包含正负数\n";
    for (i = 0; i < m; i++)
    {
        cin >> a[i];
    }
    ////////////////////////////////////////////
    for (i = 0; i < m; i++)
    {
        sum += a[i];//累加
        
        if (sum < 0)
        {
            sum =0;//和小于0,就不要了
        }
        
        if (sum > MaxSum)//如果当前累加和大于最大和
        {
            MaxSum = sum;//最大和为当前和
        }
    }

    if (MaxSum == 0)//当所有元素都为负值,找最大那个
    {
        MaxSum = a[0];
        for ( i = 1; i < m; i++)
        {
            if (a[i]>MaxSum)
            {
                MaxSum = a[i];
            }

        }
    }
    cout << "最大和=" << MaxSum;


}
View Code

 

测试截图:

posted @ 2016-03-25 22:25  里拉里拉  阅读(202)  评论(1编辑  收藏  举报