神奇的幻方
真题传送门洛谷
暴力模拟注意不要越界‘
#include<bits/stdc++.h>
using namespace std;
int x,y,n,huan[44][44];
int main()
{
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
cin>>n;
if (n==1){
cout<<1;
return 0;
}
x=1,y=n/2+1;
huan[x][y]=1;
for (int i=2;i<=n*n;i++)
{
if (x==1&&y!=n) huan[n][y+1]=i,x=n,y=y+1;
else if (x!=1&&y==n) huan[x-1][1]=i,x=x-1,y=1;
else
if (x==1&&y==n) huan[x+1][y]=i,x+=1;
else if (x!=1&&y!=n)
if (!huan[x-1][y+1]) huan[x-1][y+1]=i,x-=1,y+=1;
else huan[x+1][y]=i,x+=1;
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
printf("%d ",huan[i][j]);
printf("\n");
}
return 0;
}