魔方陣是指元素為自然數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("
enter 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("
");
for(j=0;j<size;j++)
printf("%5d",magic[i][j]);
}
}
此程序參見《中國計算機軟件專業技術資格和水平考試統編輔導教材》(程序員級、高級程序員級)《程序設計第二版》張福炎主編,清華大學出版社,1996年5月第二版,P96