没有正解,都是我的暴力
T1神奇的幻方
模拟
#include<iostream> #include<cmath> #include<ctime> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #define LL long long #define N 1609 using namespace std; int n; int h[N],l[N]; int a[42][42]; int main() { scanf("%d",&n); h[1]=1;l[1]=(n+1)/2;a[h[1]][l[1]]=1; int p;p=n*n; for(int i=2;i<=p;i++) { int t=i-1; if(h[t]==1&&l[t]!=n) { a[n][l[t]+1]=i; h[i]=n;l[i]=l[t]+1; continue; } if(l[t]==n&&h[t]!=1) { a[h[t]-1][1]=i; h[i]=h[t]-1; l[i]=1; continue; } if(h[t]==1&&l[t]==n) { a[h[t]+1][l[t]]=i; h[i]=h[t]+1; l[i]=l[t]; continue; } if(h[t]!=1&&l[t]!=n) { if(a[h[t]-1][l[t]+1]==0) { a[h[t]-1][l[t]+1]=i; h[i]=h[t]-1; l[i]=l[t]+1; }else { a[h[t]+1][l[t]]=i; h[i]=h[t]+1; l[i]=l[t]; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) printf("%d ",a[i][j]); printf("\n"); } return 0; }