这些判定肯定有哪个写错了,然后数组越界了。你会发现你这个程序5阶幻方似乎都跑不出来。
给你我以前的代码:
```cpp
#include<cstdio>
#include<cmath>
using namespace std;
int n,a[40][40],p,y;
int main()
{
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
scanf("%d",&n);
p=1,y=(n+1)/2;
for(int i=1;i<=n*n;++i)
{
a[p][y]=i;
if(!a[(p-2+n)%n+1][y%n+1]) p=(p-2+n)%n+1,y=y%n+1;
else p=p%n+1;
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
} //幸好我小时候玩过这个幻方游戏不然还真做不出来
```
不要用判定,用取模。驱魔很方便。
by Whisperain @ 2021-10-06 22:22:21
那么多判定全都可以写成取模,还不容易错。
by Whisperain @ 2021-10-06 22:22:50