- 龙凤苑中学C班5.14
5.9神奇的幻方
- @ 2024-5-15 21:09:07
#include<bits/stdc++.h> using namespace std;
long long a[40][40];
int main(){
int n,x[1600],y[1600];
scanf("%d",&n);
for(int i=0;i<=n;i++){
a[0][i]=260408,a[i][0]=260408;
}
a[1][n/2+1]=1;
x[1]=1,y[1]=n/2+1;
for(int i=2;i<=n*n;i++){
if(x[i-1]==1&&y[i-1]!=n){
a[n][y[i-1]+1]=i;
x[i]=n,y[i]=y[i-1]+1;
}
else if(y[i-1]==n&&x[i-1]!=1){
a[x[i-1]-1][1]=i;
x[i]=x[i-1]-1,y[i]=1;
}
else if(a[1][n]==i-1){
a[2][n]=i;
x[i]=2,y[i]=n;
}
else if(x[i-1]!=1&&y[i-1]!=n){
if(a[x[i-1]-1][y[i-1]+1]==0){
a[x[i-1]-1][y[i-1]+1]=i;
x[i]=x[i-1]-1,y[i]=y[i-1]+1;
}
else{
a[x[i-1]+1][y[i-1]]=i;
x[i]=x[i-1]+1,y[i]=y[i-1];
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
0 comments
No comments so far...