魔方阵的另一种解法

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有