题目大意:
计算一组数字的最大连续子串和
解题思路:
遍历数组,如果sum大于max,则更新,如果sum小于0,说明前面的和已经没了意义,直接从下一个元素开始
代码如下:
#include <stdio.h>
int main(){
int i,n,j,num,m,sum,max,start,end,temp;
int *p;
scanf("%d",&n);
for(i=1;i<=n;i++){
sum=0;
scanf("%d",&num);
p=(int *)malloc(num*sizeof(int));
for(j=0;j<num;j++)
scanf("%d",p+j);
max=-1001;
start=end=temp=1;
for(j=0;j<num;j++){
sum+=p[j];
if(sum>max){
max=sum;
start=temp;
end=j+1;
}
if(sum<0){
temp=j+2;
sum=0;
}
}
printf("Case %d:\n",i);
printf("%d %d %d",max,start,end);
if(i<n)
printf("\n\n");
else
printf("\n");
free(p);
}
}