• 当前位置:首页>>C语言>>C语言编程实例>>魔方阵的另一种解法
  • 魔方阵的另一种解法
  •     魔方阵是指元素为自然数1,2,…N2的N×N,每个元素值都不相等,每行、每列以及主、副对角线上各N个元素之和都相等。如3×3魔方阵:
    8 1 6
    3 5 7
    4 9 2
    奇数阶魔方阵的生成方法如下:
    (1) 第一个位置在第一行正中;
    (2) 新位置应当处于最近一个插入位置右上方,但如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置,如超出右边界则新位置取应选行的最左一个位置;
    (3) 若最近一个插入元素为N的整倍数,则选下面一行同列上的位置为新位置。

    #include <stdio.h>
    #define MAXSIZE 15
    int magic[MAXSIZE][MAXSIZE];
    int cur_i=0,cur_j=0;
    main()
    {int count,size=0,i,j;
    while((size%2)==0)
    {
    printf("\nenter ODD number:");
    scanf("%d",&size);
    }
    cur_j=(size-1)/2;
    for(count=1;count<=size*size;count++)
    {
    magic[cur_i][cur_j]=count;
    if((count%size)==0)
    {
    cur_i+=1;
    continue;
    }
    cur_i=cur_i-1;
    cur_j=cur_j+1;
    if(cur_i<0)
    cur_i+=size;
    else if(cur_j==size)
    cur_j-=size;
    }
    for(i=0;i<size;i++)
    {
    printf("\n");
    for(j=0;j<size;j++)
    printf("%5d",magic[i][j]);
    }
    }

    此程序参见《中国计算机软件专业技术资格和水平考试统编辅导教材》(程序员级、高级程序员级)《程序设计第二版》张福炎主编,清华大学出版社,1996年5月第二版,P96  

    [1]