杭电 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;
}
展开
 我来答
百度网友c19c0d0
2011-04-06 · TA获得超过1537个赞
知道小有建树答主
回答量:464
采纳率:0%
帮助的人:453万
展开全部
函数都是储存在栈中的,所以函数中定义的变量所占内存不能太多,太多就会把栈给爆掉的。
把数组定义在外面就好了。
提交了下,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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
logiciel
2011-04-06 · TA获得超过140个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:370万
展开全部
在函数内部不能定义如此大的数组:
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,那么就会错当数据结束了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式