c的问题求帮助

a2054652 2008-06-10 07:54:47
struct subsequence{
int value;
int start;
int end;
};
subsequence maxsubsequence(int a[],int N)
{
subsequence maxsub;
maxsub.value=0;maxsub.start=0;maxsub.end=0;
int sum=0;
for(int i=0;i<N;i++)
{
sum+=a[i];
if(sum>maxsub.value)
{maxsub.value=sum;
maxsub.end=i;
}
else if(sum<0)
{
sum=0;
if(maxsub.value==0)maxsub.start=i+1;
}
}
return maxsub;
}
如果a[]={4,-5,4,5}maxsub.start好象不对,if(maxsub.value==0)maxsub.start=i+1;有人能帮忙说下错在哪吗,如果这段代码没错,那么if(maxsub.value==0)maxsub.start=i+1;这又起什么作用,如果VALUE=0并不能保证最大子序一顶向下跳
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Soulic 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a2054652 的回复:]
哦,谢谢大家了,如果if(maxsub.value==0)
maxsub.start=i+1; 改成new=1;\判断是否是新直
j=i+1;
然后在if(sum>maxsub.value)
{maxsub.value=sum;
maxsub.end=i;
}
里中间+上
if(new==1)
{
maxsub.start=j;
new=0;
}
这样应该没问题了吧
[/Quote]
是这样的
a2054652 2008-06-11
  • 打赏
  • 举报
回复
哦,谢谢大家了,如果if(maxsub.value==0)
maxsub.start=i+1; 改成new=1;\判断是否是新直
j=i+1;
然后在if(sum>maxsub.value)
{maxsub.value=sum;
maxsub.end=i;
}
里中间+上
if(new==1)
{
maxsub.start=j;
new=0;
}
这样应该没问题了吧
HelloDan 2008-06-10
  • 打赏
  • 举报
回复
虽然上面的改得有些道理,改成了你所想的结果,但还是不对。如:

a[]={4,43,15,23,-1005,4,5};
这时的子序最大的不是后面的 4,5,而是前面的:4,43,15,23
weiyijiji 2008-06-10
  • 打赏
  • 举报
回复
VALUE=0只有1种情况,就是第1个是负数,这短代码只考虑了在这种情况下加START的值是不对
的,因为在VALUE不等于0(比如4,-5,这是VALUE=4)的情况下 ,仍需要增加。所以这句应该
把IF判断去掉,当SUM小与0即做START的改变
zbing0203 2008-06-10
  • 打赏
  • 举报
回复
struct subsequence{
int value;
int start;
int end;
};
subsequence maxsubsequence(int a[],int N)
{
subsequence maxsub;
maxsub.value=0;maxsub.start=0;maxsub.end=0;
int sum=0;
for(int i=0;i <N;i++)
{
sum+=a[i];
if(sum>maxsub.value)
{maxsub.value=sum;
maxsub.end=i;
}
else if(sum <0)
{
sum=0;
//if(maxsub.value==0)
maxsub.start=i+1;
}
}
return maxsub;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧