【问题标题】:Spiral Magic Square in CC中的螺旋魔方
【发布时间】:2016-03-18 02:27:57
【问题描述】:

好的,所以我想制作一个代码,该代码将打印一个魔方,其工作方式与图片中的一样 (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),这是为什么呢?

【问题讨论】:

  • 你写的超出了a的范围。 int a[10][10] 的有效索引为 09
  • 好吧,所以我把它改成了 [11][11](愚蠢的错误),但它被打印成那样(imgur.com/ai221Pu),这是为什么呢?

标签: c matrix spiral magic-square


【解决方案1】:

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

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

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

int magic_square[11][11];

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

【讨论】:

  • 好吧,所以我把它改成了 [11][11](愚蠢的错误),但它被打印成那样(imgur.com/ai221Pu),这是为什么呢?
  • 问题是 printf 中的间距,您可以使用 printf 中的宽度说明符修复它。只需在数字说明符之前添加您将打印的位数,少于该位数的数字将用空格填充。例如: printf("%3d ", a[i][j]);这是 printf 的完整参考指南:cplusplus.com/reference/cstdio/printf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多