下面的是正确的代码
by 爱睡大觉 @ 2021-02-03 21:37:52
这是错误代码
```c
#include<stdio.h>
int main()
{
int fang[40][40] = {0};
int n;
scanf("%d", &n);
int x = 1, y = (n + 1) / 2;
fang[x][y] = 1;
int no = n * n;
int op = 2;
for (int i = 2; i <= no; i++)
{
if (x == 1 && y != n)
{
//fang[n][y + 1] = op;
++y ; x = n; ++op;
}
else if (x != 1 && y == n)
{
//fang[x - 1][1] = op;
y = 1; --x ; ++op;
}
else if (x == 1 && y == n)
{
//fang[x + 1][y] = op;
++x ; ++op;
}
else
{
if (fang[x - 1][y + 1] == 0)
{
//fang[x - 1][y + 1] = op,
--x ; ++y ; ++op;
}
else
{ //fang[x + 1][y] = op,
++x , ++op;
}
}
fang[x][y]=op;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
printf("%d ", fang[i][j]);
printf("\n");
}
return 0;
}
```
by 爱睡大觉 @ 2021-02-03 21:39:07
```cpp
int op = 2;
```
改成
```cpp
int op = 1;
```
也可以过的,如果op初值是2那你填的第一个数是3,就错了
(这么明显的错误,随便试一下样例都能找出来吧?)
by _caiji_ @ 2021-02-03 21:47:50
@[爱睡大觉](/user/470496) 你这种简便写法也可以的,就注意一下初始值。建议以后代码出错,先本机运行一遍,再对着你写的代码模拟一遍,确定没大问题,再来求助。
by _caiji_ @ 2021-02-03 21:50:22
@[caijianhong](/user/390033) 谢谢谢谢
by 爱睡大觉 @ 2021-02-03 23:21:31