XM的小窝


 

使用C解决奇数行列魔方阵问题

魔方阵定义:

魔方阵是指每一行、每一列、对角线之和都为一个定值,比如3*3矩阵为:
8 1 6
3 5 7
4 9 2

其规律为:

  1. 下一个值在当前值的上一行的后一列
  2. 若当前值所在的行为第一行,则下一个值在最后一行的下一列
  3. 若当前值所在的列为最后一列,则下一个值在上一行的第一列
  4. 若下一个要存放的位置已经有值了,则下一个值则放在当前值当前列的下一行

代码:

#include<stdio.h>
#define N 3
int main(){
    int mfz[N][N]={0};//置零
    int i,j,x=0,y=N/2,count=1;
    while(count<=N*N){
        mfz[x][y]=count;
        i=x,j=y;
        if(i==0)i=N-1;//判断是否为第一行
        else i--;
        if(j==N-1)j=0;//判断是否为最后一列
        else j++;
        if(mfz[i][j]!=0){//判断要插入的位置是否有值
            i=x+1;
            j=y;
        }
        x=i,y=j;
        count++;
    }
    for(i=0;i<N;i++){
    for(j=0;j<N;j++)
    printf("%d\t",mfz[i][j]);
    printf("\n\n");
    }
}
/*
输出:
    8 1 6
    3 5 7
    4 9 2
*/
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注