返回一个整数数组中最大子数组的和。

 

 该题的意思是 如果一个数组为   

-1 5 3 -19 5 3    第一个数之后若是该数与前一个数之和大于该数那么将这个和替换概数 即5-1<5,5不变 。 

而5+3>5 则将三替换为8以此类推

 当一个数与前一个数之和再次小于这个数时,这个数为一个下一个的最小数组,

如5+3-19=-11+5<5 则5为下一个最小数组的开始。

用代码表示 a[i]+a[i-1]>a[i]; a[i]=  a[i]+a[i-1];  max=(max,a[i]);

#include<iostream>
using namespace std;
void main()
{
	int s[100];
	int n, max;
	//输入数组长度
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		//输入数组元素
		cin >> s[i];
	}

	//max初始化为s[0]
	max = s[0];
	for (int i = 1; i < n; i++)
	{
		//比较与前一项相加值是否会增大
		if ((s[i] + s[i - 1])> s[i])
		{

			s[i] = s[i] + s[i - 1];

		}
		//更新max的值
		if (max < s[i])
			max = s[i];
	}
	cout << "最大连续子数组之和为:" << max << endl;

}

  

3+5-3+6=11

 

posted @ 2020-02-27 18:44  利威尔  阅读(127)  评论(0编辑  收藏  举报