N 階奇數魔方陣:
void magic (int n) { int m [9*9] = {0}; int i=0, o=n-1, r=0, c=n/2; while (i < n*n) { m [r*n+c] = ++i; i%n? (r?--r:r=o), c-o?++c: c=0: ++r; } while (i--) printf ("%3d%c", m[i], i%n?' ':'\n'); puts (""); } int main (/* daviddr 081224 */) { return magic(5), getch(); }
針對(2k+1)*(2k+1)方陣,傳統製作方法是: 1. 以 (k,0) 做為起點。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │ │ │ │ ├─┼─┼─┤ │ │ │ │ └─┴─┴─┘ 2. 朝右上方移動 (令x++,y--),遇到邊緣則繞捲。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │ │ │ │ ├─┼─┼─┤ │ │ │2│ (2由上往下繞捲到此處) └─┴─┴─┘ ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │3│ │ │ (3由右往左繞捲到此處) ├─┼─┼─┤ │ │ │2│ └─┴─┴─┘ 3. 當(x,y)處的右上方已有數字時,便往下放在(x,y+1) 放置時遇到邊緣則繞捲。 ┌─┬─┬─┐ │ │1│ │ ├─┼─┼─┤ │3│ │ │ ├─┼─┼─┤ │4│ │2│ └─┴─┴─┘ 4. 重複此法填到最後一個數字。
沒有留言:
張貼留言