生成一个魔方

时间:2017-04-13 18:42:26

标签: c magic-square

这是一个神奇的方形问题,魔方n的大小应该作为命令行参数输入。 n必须是奇数。  The expected output should be like this.我的问题是,当我尝试执行代码时, it generates a bunch of 0s.

我是C初学者,我希望有人能帮我解决问题。 非常感谢你!感谢您的帮助!

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int n = atoi(argv[1]);
    int magic[n+1][n+1];
     if(argc == 2) 
        {
         for(int i = 0; i < n; i++) 
         {
            for(int j = 0; j < n; j++) 
            {
              magic[i][j] = 0;
            }
          }

          int i =0 ;//row
          int j= n / 2; //column

          for ( int k = 1; k <= n*n; k++ )
          {
             magic[j][i] = k;

             if(magic[j][i] == 0) //if the spot is empty
             {
                 if (j == 0 && i == 0)
                 {
                     j--;//go up one level
                     i--; //go left
                 }

                 else
                 {
                     if(j == 0) //if it's on the first row
                        j = n - 1;
                     else
                        j--;

                     if (i == 0) //if it's on the left column
                         i = n - 1;
                     else
                         i--;
                  }
              }

              else //if the spot is not empty
              {
                  j = j + 2;
                  i++;
              }
      }
  }


    for(int x=0; x<n; x++)
          {
             for(int y=0; y<n; y++)
                 printf("%3d", magic[x][y]);
             printf("\n");
          }

          return 0;
    }

1 个答案:

答案 0 :(得分:-1)

您不能使用变量来声明数组的大小

 int magic[n+1][n+1];

你可以:

1)查找如何动态分配数组

2)使用向量

此外,我不认为这会导致问题,但

int n = atoi(argv[1]);

不检查以确保argv [1]包含可能在以后导致问题的数字字符。