永发信息网

c语言求最大子串和的问题。求代码。

答案:2  悬赏:80  手机版
解决时间 2021-11-20 20:50
  • 提问者网友:不要迷恋哥
  • 2021-11-20 13:31
c语言求最大子串和的问题。求代码。
最佳答案
  • 五星知识达人网友:往事埋风中
  • 2021-11-20 13:59
#include

int main()
{
int i,temp,max;
//int num[10]={-33,16,48,-5,16,-20,19,-21,32,-1};//存放数组中

int num[10];
printf("输入10个数为:\n");
for(i=0;i<10;i++) scanf("%d",&num[i]);
for(i=0,temp=0,max=0;i<10;i++)
{

temp+=num[i];
if(temp>=0)
{
if(temp>max)
{
max=temp;
}
}
else
temp=0;

}

printf("%d\n",max);

return 0;

}追问那请问一下,数组是不是累加的呢?我的意思是说,比如这个数列100 -2 -3 -40 46,结果应为101,temp值是不是从第二项开始就是0,一直持续到最后的46 ,而这时候的num[5]应该是1?就是累加的?追答不是,你看temp+=num[i];相当于temp=temp+num[i]是累加的和,不是单个的数据追问小生愚昧,从我那个数列看的话,i=1时,temp=-2,然后temp<0,所以temp被赋值为0,然后继续执行,i=2,temp=-3,同理temp被赋值为0……那怎么出来的101啊??追答呵呵,你先看看temp+=num[i];它不是temp=num[i];注意等号左侧有个加号。是将右侧表达式累加到左侧在复制给左侧
所以
i=0时,temp=0+100=100
i=1时,temp=100+(-2)=98,然后temp>0,
i=2,temp=98+(-3)=95,同理temp>0……
i=3,temp=95+(-40)=55,.....
i=4,temp=55+46=101.....

还有顺便说下,数组下标是从0开始算起的,不是从1开始的,所以要i=0,不是i=1开始的追问欧了!!谢谢!!!求您的qq或者其他联系方式,好不好,我今年大一,有很多问题想问问您~~~追答有问题直接可以给我留言就行。
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-11-20 15:08
试试这个?
#include

int main()
{
int i,j,temp,max;
int num[10];

for (i=0; i<10; i++)
scanf("%d", &num[i]);

for (i=0,temp=0,max=0; i<10; i++)
{
for (j=i; j<10; j++)
{
temp += num[j];

if ( temp > max )
{
max = temp;
}
}
temp = 0;
}
printf("%d\n",max);

return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯