最大子列和问题
当输入的数全是负数时输出0该怎么修改?大神求帮忙#include<stdio.h>voidmain(){intk;scanf("%d",&k);intn[1000000]...
当输入的数全是负数时输出0 该怎么修改?大神求帮忙
#include <stdio.h>
void main()
{
int k;
scanf("%d",&k);
int n[1000000],i;
int i2,a,sum,max,j;
for (i=0; i<k;i++)
{
scanf("%d",&n[i]);
}
for (i2=1; i2<=k; i2++){
for(j=i2; j<=k; j++){
sum=0;
for(a=i2; a<=j; a++){
sum=sum+n[a-1];
if(sum>max)
max=sum;}}}
printf("%d",max);
} 展开
#include <stdio.h>
void main()
{
int k;
scanf("%d",&k);
int n[1000000],i;
int i2,a,sum,max,j;
for (i=0; i<k;i++)
{
scanf("%d",&n[i]);
}
for (i2=1; i2<=k; i2++){
for(j=i2; j<=k; j++){
sum=0;
for(a=i2; a<=j; a++){
sum=sum+n[a-1];
if(sum>max)
max=sum;}}}
printf("%d",max);
} 展开
1个回答
展开全部
1、当数组n元素都为负数时,sum=sum+n[a-1]; if(sum>max) 此处因为sum加上n[a-1]是一个负数,所以sum也是一个负数,而max“初始值”为0(因为max没有初始化,可能是随机值,你的系统赋其值为0,建议定义时就初始化),所以这个if条件始终不满足,if里面的max=sum;也就不会执行,所以max始终为0.
2、我看到你的这个n数组有100万元素,一个int占4个字节,这个数组占了400万字节,约为3.8MB,一般来说栈空间大小只有几MB大小,这种大数组建议用动态内存申请(如malloc),越过栈大小可能会导致程序异常终止。
2、我看到你的这个n数组有100万元素,一个int占4个字节,这个数组占了400万字节,约为3.8MB,一般来说栈空间大小只有几MB大小,这种大数组建议用动态内存申请(如malloc),越过栈大小可能会导致程序异常终止。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询