#include<iostream>
int get_sub_sum_max(int *arr, int len)
{
int max, sum;
max = arr[0]; //max存储最大子数组和
sum = 0; //判断 一直相加后 是否为负数,若为负数,则会影响后面
while (len--)
{
sum += *arr++; //下一个数组 元素 遇到负数 则清零
//sum一直加等数组中的元素,若变为负数,则置为零,重新计算
if (sum >= max) //当加上一个负数时 max 没有改变 观察后面加许多值后有木有 大于 max的
max = sum; //max 存储sum 不 是零的数后 ,再与下一轮 sum+arr[i] 后相比
else if (sum < 0) //当前的和为负数,则影响下一个数
sum = 0;
}
return max;
}
int main()
{
// int a[10]={1,-8,6,3,-1,5,7,-2,0,1}; //这个数组 必须结果是 20
int a[8] = { 1, -2, 3, 10, -4, 7, 2, -5 }; //这个数组 必须 结果是 18
// int a[10]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
printf("%d\n", get_sub_sum_max(a, 8));
system("pause");
return 0;
}