最大子列和加上求开始点和结束点的值
如果全是负数则输出0 首尾数值
#include<stdio.h>
void findmaxsub(int num[],int len)
{
int i=0,maxsum=0,sum=0,left=0,right=len-1,templeft=0,flag=0;
for(i=0;i<len;i++)
{
if(num[i]==0&&flag==0)
flag++; //用来记录存在0,如果最终结果是0可能全是负数也可能有0加负数
sum+=num[i];
if(sum>maxsum)
{
maxsum=sum;
left=templeft; //要出现更大的才改变left和right
right=i;
}
if(sum<0)
{
sum=0;
templeft=i+1; //此时前面的templeft舍弃,重新计算
}
}
if(maxsum==0&&flag==1)
printf("0 0 0"); //全是负数加一个0 则输出0 如果全是负数没有0则输出全部,在下一行
else printf("%d %d %d",maxsum,num[left],num[right]);
}
int main()
{
int len,i;
scanf("%d",&len);
int num[len];
for(i=0;i<len;i++)
scanf("%d",&num[i]);
findmaxsub(num,len);
return 0;
}