求最大子列和,具体的测试点
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int k;
int i,flag=0;
int a[10002];
scanf("%d",&k);
int sum=0,maxn=-1;
int s,e,st;
for(i=0;i<k;i++)
{
cin>>a[i];
if(i==0)
s=a[0];
if(sum<0)
{
s=a[i];
sum=0;
}
sum+=a[i];
if(sum>maxn)
{
maxn=sum;
st=s;
e=a[i];
}
}
for(int i=0;i<k;i++)
{
if(a[i]>=0)
{
flag=1;
break;
}
}
if(flag==1)
printf("%d %d %d",maxn,st,e);
else
printf("0 %d %d",a[0],a[k-1]);
}
注意要先判断sum是否小于0再将值加到sum上,这样可以确定起始位置的值,判断是否全为负数时一定要是>=0而不是>0,maxn的起始值应该是负数而不是零,以防有一开始就都为零的时候