纯模拟
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int data[41][41];//矩阵存储
int main(){
int n;//幻方大小
cin>>n;
memset(data,-1,sizeof(data));
int x=1,y=(n+1)/2;//x,y的值
data[x][y]=1;
for(int i=2;i<n*n+1;i++){
if(x==1&&y!=n){
x=n;y=y+1;
data[x][y]=i;
}else if(x!=1&&y==n){
x=x-1;y=1;
data[x][y]=i;
}else if(x==1&&y==n){
x=x+1;
data[x][y]=i;
}else if(x!=1&&y!=n){
if(data[x-1][y+1]==-1){
x=x-1;y=y+1;
data[x][y]=i;
}else{
x=x+1;
data[x][y]=i;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}