OJ上的一个题,输入8时有输出,而输入16时无输出,debug时报错,提交到OJ后显示“内存超限”

发布时间:2019-07-29 18:01:45


#include <cstdio>

int a[10000][10000] = {0}, n, i, j, t, plus = 1;

int main() {

a[0][0] = 1;

scanf("%d",&n);

t = n;

while(t) {

for(i = 0; i < plus; ++i)

for(j = 0; j < plus; ++j)

a[i][j+plus]=a[i][j]+plus;

for(i = 0; i < plus; ++i)

for(j = 0; j < plus; ++j) {

a[i+plus][j]=a[i][j+plus];

a[i+plus][j+plus]=a[i][j];

}

plus *= 2;

--t;

}

for(i = 0; i < n; ++i) {

//printf("%d:",a[i-1][0]);

for(j = 0; j < n; ++j) {

if(j == 0)printf("%d:",a[i][j]);

elseprintf("%2d",a[i][j]);

}

printf("\n");

}

return 0;

}


推荐回答

我只帮你分析错,不帮你解决

当输入为16时,plus最大值为65536

而循环中,你a的一个下标[j+plus]的值可达到131072

你只定义了a[10000][10000]

下标早溢出了(你要改进你的算法)

以上问题属网友观点,不代表本站立场,仅供参考!