这是一个神奇的方形问题,魔方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;
}
答案 0 :(得分:-1)
您不能使用变量来声明数组的大小
int magic[n+1][n+1];
你可以:
1)查找如何动态分配数组或
2)使用向量
此外,我不认为这会导致问题,但
int n = atoi(argv[1]);
不检查以确保argv [1]包含可能在以后导致问题的数字字符。