#include
#include
int MaxSubseqSum(int lis[],int n,int *left,int *right)
{
int thissum=0,maxsum=0;
int l=lis[0],r=lis[0];
int i;
for(i=0;i {
thissum+=lis[i];
r=lis[i];
if(thissum>maxsum)
{
maxsum=thissum;
*left=l;
*right=r;
}
else if(thissum<0)
{
thissum=0;
l=r=lis[i+1];
}
}
return maxsum;
}
int main()
{
int *l,*r;
int list[]={1,7,8,5,-5,-6,8,6,-8,9,1,4,-2};
int n=sizeof(list)/sizeof(int);
int sum=MaxSubseqSum(list,n,l,r);
printf("%d %d %d",sum,*l,*r);
return 0;
}
有些系统要多次运行几遍就可以了
int list[]={1,7,8,5,-5,-6,8,6,-8,9,1,4,-2};int n=sizeof(list)/sizeof(int);这两句代码连用就会出问题。初始化了的数组,存放的位置在堆区,而sizeof函数只能求栈区变量的大小,用sizeof函数求堆区变量,得到的结果是0。要用sizeof求变量或者数组的大小,那么变量或数组就不能初始化,或者是静态的。
c语言的for循环还有这种写法啊,第一次见,你的程序有个问题:
int *left,int *right; 还没有指向谁或者分配内存,怎么就“*left=l; *right=r;”可能是你的for循环我没看懂吧