n阶幻方
作者:
木枝
,
2022-03-26 16:28:45
,
所有人可见
,
阅读 182
以前刚学的时候跑开了,没去写这个,现在补上
#include<iostream>
using namespace std;
const int N=30;
int a[N][N];
int main()
{
int cnt;
int n;
scanf("%d",&n);
int i=1,j=(n+1)/2;
a[i][j]=1;
for(int cnt=2;cnt<=n*n;cnt++)
{
i--,j++;
if(i==0) i=n;
if(j==n+1) j=1;
if(a[i][j]==0) a[i][j]=cnt;
else
{
i=i+2,j--;
if(i>n) i=(n+i)%n;
if(j==0) j=n;
a[i][j]=cnt;
}
//printf("%d : %d %d\n",cnt,i,j);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++) printf("%5d",a[i][j]);
puts("");
}
return 0;
}