发布时间: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]
下标早溢出了(你要改进你的算法)