谁教我单偶幻方的框怎么填
谁教我单偶幻方的框怎么填
#include <stdio.h> #define N 100 void oujie(int oushu) { int a[N][N]={0},i,j,k=1,n,m; n=oushu/2; m=(oushu-2)/4; for(i=1,j=3*n/2;k<=n*n;) { if(i<0) { i=i+3*n; continue; } if(j>=3*n) { j=j-3*n; continue; } if(j<0) { j=j+3*n; continue; } if(a[i][j]!=0) { i=i+2*3; j=j-1*3; if(i>3*n) { i=i-3*n; continue; } if(j<0) { j=j+3*n; continue; } } a[i][j]=k++; i=i-3; j=j+3; } for(i=1;i<3*n;i=i+3) for(j=1;j<3*n;j=j+3) { if(i<(3*(m+1)-3)||i==(3*(m+1)-2)&&j!=(3*(m+1)-2)||i==(3*(m+1)+1)&&j==(3*(m+1)-2)) a[i-1][j]=1; else if(i==(3*(m+1)+1)&&j!=(3*(m+1)-2)||i==(3*(m+1)-2)&&j==(3*(m+1)-2)) a[i-1][j]=2; else a[i-1][j]=3; } for(i=1;i<3*n;i=i+3) for(j=1;j<3*n;j=j+3) { if(a[i-1][j]==1) { a[i-1][j-1]=4*a[i][j]; a[i-1][j+1]=4*a[i][j]-3; a[i+1][j-1]=4*a[i][j]-2; a[i+1][j+1]=4*a[i][j]-1; } if(a[i-1][j]==2) { a[i-1][j-1]=4*a[i][j]-3; a[i-1][j+1]=4*a[i][j]; a[i+1][j-1]=4*a[i][j]-2; a[i+1][j+1]=4*a[i][j]-1; } if(a[i-1][j]==3) { a[i-1][j-1]=4*a[i][j]-3; a[i-1][j+1]=4*a[i][j]; a[i+1][j-1]=4*a[i][j]-1; a[i+1][j+1]=4*a[i][j]-2; } } for(i=0;i<3*n;i=i+1) { { for(j=0;j<3*n;j=j+1) { printf("%4d",a[i][j]); j=j+2; printf("%4d",a[i][j]); } printf("\n"); } i=i+2; { for(j=0;j<3*n;j=j+1) { printf("%4d",a[i][j]); j=j+2; printf("%4d",a[i][j]); } printf("\n"); } } } void jijie(int n) { int a[N][N]={0},i,j,k=1; for(i=0,j=n/2;k<=n*n;) { if(i<0) { i=i+n; continue; } if(j>=n) { j=j-n; continue; } if(j<0) { j=j+n; continue; } if(a[i][j]!=0) { i=i+2; j=j-1; if(i>n) { i=i-n; continue; } if(j<0) { j=j+n; continue; } } a[i][j]=k++; i--; j++; } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%4d",a[i][j]); printf("\n"); } } main() { int n; printf("偶数阶数为4n+2,且阶数为3到66之间\n"); printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n<66&&(n-2)%4==0) oujie(n); else if(n%2==1&&n<66) jijie(n); else printf("错误的阶数!\n"); }