程序代码:
#include<stdio.h>
#define MAX 100000
long long maxSeq(int num[],long long n)
{
long long tmp=0,max=0;
long long i=0;
for(i=0;i<n;i++)
{
if(tmp < 0)
tmp = num[i];
else
tmp+=num[i];
if(max<tmp)
max=tmp;
}
return max;
}
int main()
{
long long n,i=0;
int num[MAX];
scanf("%lld",&n);
for(;i<n;i++)
scanf("%lld",&num[i]);
long long m=maxSeq(num,n-1);
if(m>0)
printf("%lld",m);
else
printf("0");
return 0;
}
思路解析:
从数组的第一个元素开始,往后累加,a0、a0+a1、a0+a1+…+ax每循环一次,比较前n项的序列和与max的大小,更新max的值。如果前n项和小于0,则抛弃该序列,从第n+1项开始累加,重复上述过程,知道所有元素遍历一次。得到的max即为最大序列和。
运行结果: