對奇階魔方陣,可用Dole Rob算法生成,其過程爲:從1開始,以此插入各天然數,直到N*N爲止。選擇插入位置原則爲:
a. 第一個位置在第一行的正中;
b. 新位置應當處於最近一個插入位置右上方,但如右上方位置已超出方陣上邊界,則新位置取應選列的最下一個位置;如超出右邊界則新邊界取應選行的最左一個位置;
c. 若最近一個插入元素爲N的整數倍,則選下面一行同列的位置爲新位置。算法
實現代碼以下:spa
#include<stdio.h> #include<stdlib.h> #define SIZE 100 //魔法陣 void Magic() { int m[SIZE+1][SIZE+1]; int n; int value=1; int col,row; printf("請輸入魔方陣的階數n,n爲奇數且n<=%d;n=",SIZE); scanf("%d",&n); if(!(n%2)||n<1||n>SIZE) { printf("輸入有誤!\n"); return ; } row=1; col=(n+1)/2; while(value<=n*n) { m[row][col]=value; if(value%n) { row--; col++; if(row<1) row=n; if(col>n) col=1; } else row++; value=value+1; } for (int i = 1; i < n+1; i++) { for (int j= 1; j < n+1; j++) printf("%5d",m[i][j]); printf("\n"); } }
實現的很巧妙!code