魔方阵是指元素为自然数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