魔術方陣別稱魔術方陣,是一種已流傳千年的數字排列,不管是中西方對這奇妙的陣列都有所研究.
對平面魔方的構造,分爲三種情況:N爲奇數、N爲4的倍數、N爲其它偶數(4n+2的形式)
N 爲奇數時,最簡單
(1) 將1放在第一行中間一列;
(2) 從2開始直到n×n止各數依次按下列規則存放:每一個數存放的行比前一個數的行數減1,列數加1
(3) 如果行列範圍超出矩陣範圍,則迴繞。 例如1在第1行,則2應放在最下一行,列數同樣加1;
(4) 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,則把下一個數放在上一個數的下面。
用C語言實現的代碼:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int main()
{
int n; //矩陣行、列數
int matrix[MAXSIZE][MAXSIZE]={0};
int i=1,j; //循環變量
int k=1;
int tmpi=0,tmpj=0;
while(1)
{
printf("請輸入矩陣行數(奇數):");
scanf("%d",&n);
if((n<=0)||(n%2==0))
{
printf("請輸入正確的矩陣行數(正奇數):");
scanf("%d",&n);
}
else
break;
}
j=n/2+1;
matrix[i][j]=k;
for(k=2;k<=n*n;k++)
{
tmpi=i;
tmpj=j;
if(j==n)
{
j=1;
}
else
{
j++;
}
if(i==1)
{
i=n;
}
else
{
i--;
}
if(matrix[i][j]!=0)
{
i=tmpi+1;
j=tmpj;
}
matrix[i][j]=k;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%2d ",matrix[i][j]);
}
printf("\n");
}
}
運行效果如下: