#include<stdio.h>
#include<math.h>
int main()
{
int n,sum;
scanf("%d",&n);
int deep=log2(n+1);
int tree[10000][10000];
int sw[10000];
for(int i=0;i<deep;i++)
{
sum=0;
for(int j=0;j<pow(i,2);j++)
{
scanf("%d",&tree[i][j]);
sum+=tree[i][j];
}
sw[i]=sum;
}
int max=sw[0];
int c;
for(int i=1;i<deep-1;i++)
{
if(sw[i]>=max)
{
max=sw[i];
}
}
for(int i=0;i<deep;i++)
{
if(sw[i]==max)
{
c=i;
break;
}
}
printf("%d",c);
return 0;
}
请大佬帮忙解答一下!
这个:int tree[10000][10000];
改成:int tree[100][100];
原因:数组的初始化大小超过了编译器的默认stack大小。
int tree[10000][10000] 约为400M大小。
栈空间的大小是有限制的,如果需要的内存比较大,可以用malloc或者new申请内存放到堆。
也可以放在函数外也就是全局变量