-1

好的,所以我想制作一个代码,它将打印一个像图片中的那样工作的幻方(http://imgur.com/ks0yemC)(这是一个 5x5 矩阵),但它是 11x11。代码对我来说似乎很好,但不幸的是它不起作用,任何人都可以帮助我吗?

int main(int argc, char *argv[]) {
int i, j,k,l;   

int a[10][10] = {0} ;

k=5;

l=5;

a[k][l]=1;

for (i=1; i<11; i++) {

    if (i%2!=0){

        for (j=0; j<i; j++) {
            a[k][l+1]=a[k][l] + 1;
            l++;    }

        for (j=0;j<i;j++) {
            a[k+1][l]= a[k][l] + 1;
            k++;    }

    }

    if (i%2==0){

        for (j=0; j<i; j++){
            a[k][l-1]= a[k][l] + 1;
            l--;    }

        for (j=0; j<i; j++){
            a[k-1][l]= a[k][l] + 1;
            k--;    }
    }

    if (i==10){

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

            a[k][l+1]=a[k][l] + 1;
            l++;
        }
    }
}
for(i=0; i<11;i++){

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

        printf("%d ", a[i][j]); }

    printf("\n");
}


return 0;
}

好的,所以我将它修复为 [11][11](愚蠢的错误),但它会像那样打印(http://imgur.com/ai221Pu),这是为什么呢?

4

1 回答 1

0

代码不是很清楚,但请检查声明大小

int a[10][10] = {0} ;

声明数组时,放置在其中的值对应于从 1 开始的实际大小,而不是像访问它们时那样从 0 开始。这可能会导致分段错误(超出为您的程序运行而保留的内存),但可能只会导致打印出随机数,因为您只超出大约 44/88 字节(取决于 int 大小) . 而是将结构声明如下,请使用逻辑名称而不是随机标签,因为它对程序解释有很大帮助:

int magic_square[11][11];

编辑:还要检查你的缩进,因为它被一个标签关闭

于 2016-03-18T02:35:19.473 回答