#includemain(){ int a[20][20],i,j,k,p=1,n; while(p==1) { printf("Enter n(n=1--19):"); scanf("%d",&n); if(n>0&&n<=19&&n%2!=0)p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++) { i-=1; j+=1; if(i<1&&j>n) { i+=2; j-=1; } else { if(i<1)i=n; if(j>n)j=1; } if(a[i][j]==0)a[i][j]=k; else { i+=2; j-=1; a[i][j]=k; } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++)printf("%4d",a[i][j]); printf("\n\n"); } return 0; }由于技术问题用这种方法只能求出奇数的幻方,偶数的直接被无视了。。。