杭电 1003 总是Runtime Error!帮我看一下哪里错了!谢谢!
#include<stdio.h>intmain(){inta[21][100001],T,number,i,j,start,temp,end,b,max;scanf("...
#include<stdio.h>
int main()
{
int a[21][100001],T,number,i,j,start,temp,end,b,max;
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&number);
for(j=0;j<number;j++)
scanf(" %d",&a[i][j]);
a[i][j]='#';
}
for(i=0;i<T;i++)
{
start=end=b=1;
temp=0;
max=-1001;
printf("Case %d:\n",i+1);
for(j=0;a[i][j]!='#';j++)
{
temp+=a[i][j];
if(temp>max)
{
max=temp;
start=b;
end=j+1;
}
if(temp<0)
{
b=j+2;
temp=0;
}
}
printf("%d %d %d\n",max,start,end);
if(i!=T-1)
printf("\n");
}
return 0;
} 展开
int main()
{
int a[21][100001],T,number,i,j,start,temp,end,b,max;
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&number);
for(j=0;j<number;j++)
scanf(" %d",&a[i][j]);
a[i][j]='#';
}
for(i=0;i<T;i++)
{
start=end=b=1;
temp=0;
max=-1001;
printf("Case %d:\n",i+1);
for(j=0;a[i][j]!='#';j++)
{
temp+=a[i][j];
if(temp>max)
{
max=temp;
start=b;
end=j+1;
}
if(temp<0)
{
b=j+2;
temp=0;
}
}
printf("%d %d %d\n",max,start,end);
if(i!=T-1)
printf("\n");
}
return 0;
} 展开
2个回答
展开全部
函数都是储存在栈中的,所以函数中定义的变量所占内存不能太多,太多就会把栈给爆掉的。
把数组定义在外面就好了。
提交了下,WA了。。。
楼主在自己看着改改把。。
#include<stdio.h>
int a[21][100001];
int main()
{
int T,number,i,j,start,temp,end,b,max;
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&number);
for(j=0;j<number;j++)
scanf(" %d",&a[i][j]);
a[i][j]='#';
}
for(i=0;i<T;i++)
{
start=end=b=1;
temp=0;
max=-1001;
printf("Case %d:\n",i+1);
for(j=0;a[i][j]!='#';j++)
{
temp+=a[i][j];
if(temp>max)
{
max=temp;
start=b;
end=j+1;
}
if(temp<0)
{
b=j+2;
temp=0;
}
}
printf("%d %d %d\n",max,start,end);
if(i!=T-1)
printf("\n");
}
return 0;
}
把数组定义在外面就好了。
提交了下,WA了。。。
楼主在自己看着改改把。。
#include<stdio.h>
int a[21][100001];
int main()
{
int T,number,i,j,start,temp,end,b,max;
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&number);
for(j=0;j<number;j++)
scanf(" %d",&a[i][j]);
a[i][j]='#';
}
for(i=0;i<T;i++)
{
start=end=b=1;
temp=0;
max=-1001;
printf("Case %d:\n",i+1);
for(j=0;a[i][j]!='#';j++)
{
temp+=a[i][j];
if(temp>max)
{
max=temp;
start=b;
end=j+1;
}
if(temp<0)
{
b=j+2;
temp=0;
}
}
printf("%d %d %d\n",max,start,end);
if(i!=T-1)
printf("\n");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在函数内部不能定义如此大的数组:
int a[21][100001]
改为:
static int a[21][100001];
int T,number,i,j,start,temp,end,b,max;
如果一组数据都比-1001小,那么最大值不是-1001.因此:
max=-1001;
要改为
max=a[i][0];
不能把'#'当作一行数据的结束标志。'#'的ASCII码是35,如果一个数据是35,那么就会错当数据结束了。
int a[21][100001]
改为:
static int a[21][100001];
int T,number,i,j,start,temp,end,b,max;
如果一组数据都比-1001小,那么最大值不是-1001.因此:
max=-1001;
要改为
max=a[i][0];
不能把'#'当作一行数据的结束标志。'#'的ASCII码是35,如果一个数据是35,那么就会错当数据结束了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询