先给题目链接:神奇的幻方
太水了这题,直接模拟就行,直接贴代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int num[n][n];
memset(num,0,sizeof(num));
num[0][n/2]=1;
int x=0,y=n/2;
for(int i=2;i<=n*n;i++){
if(x==0&&y!=n-1){
x=n-1;
y++;
}else if(x!=0&&y==n-1){
y=0;
x--;
}else if(x==0&&y==n-1){
x++;
}else if(num[x-1][y+1]==0){
x--;
y++;
}else{
x++;
}
num[x][y]=i;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d",num[i][j]);
if(j!=n-1){
printf(" ");
}
}
if(i!=n-1)
printf("\n");
}
return 0;
}