6.7魔方阵

it2025-12-02  3

//7.魔方阵 //1.1放在第一行中间(暗示n为奇数) //2.若数在第一行a[0][j],下一个数a[n][j+1] //3.若一个数在最后一列,a[i][n],下一个数a[i-1][0] //4.普通的数字下一个数a[i][j],下一个数a[i-1][j+1] //5.若按照规则,位置上已经有了数字,或者上一个数是a[0][n],把数字放上一个数的下面 #define M 11 int main() { int j,k,j2,k2; int count=0; int a[M][M],b[M][M]; //b来表示a上有无数据,有1无0 for(int i=0;i<M;i++) { for(int j=0;j<M;j++) { b[i][j]=0; } } for (int i=1;i<=M*M;i++) { if(i==1) { j=0,k=M/2; a[j][k]=i; b[j][k]=1; } else if(j==0&&k==M-1) { j2=j; k2=k; j=j+1; k=k; while(b[j][k]==1) { j=j2+1; k=k2; j2++; } a[j][k]=i; b[j][k]=1; } else if(j==0) { j2=j; k2=k; j=M-1; k=k+1; while(b[j][k]==1) { j=j2+1; k=k2; j2++; } a[j][k]=i; b[j][k]=1; } else if(k==M-1) { j2=j; k2=k; j=j-1; k=0; while(b[j][k]==1) { j=j2+1; k=k2; j2++; } a[j][k]=i; b[j][k]=1; } else { j2=j; k2=k; j=j-1; k=k+1; while(b[j][k]==1) { j=j2+1; k=k2; j2++; } a[j][k]=i; b[j][k]=1; } } //输出 for(int i=0;i<M;i++) { for(int j=0;j<M;j++) { printf("%d\t",a[i][j]); } printf("\n"); } return 0; }

 

最新回复(0)