Programming Assignment #5

一個 n 階 (n 為奇數) 的魔術方陣 (magic square) 即是一個 n×n 的二維方陣,它的元素從 1 到 n2 (不重複),且方陣中的各個橫列 (row)、直行 (column)、對角斜線 (diagonal)、和反對角線 (anti-diagonal) 上數字之加總起來的和都相等,即是 (1+n2)n/2。下列是三階和五階魔術方陣的例子:

三階魔術方陣:

6 1 8
7 5 3
2 9 4

 

 

五階魔術方陣:

15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11

 

 

 

一個 n 階魔術方陣產生的演算法如下:

  1. 在最上列的最中間元素處放 1。

  2. 放了 k 之後,下次則放 k+1,直到 n2 為止。

  3. 每次要擺放下一個數時,往左上角的方格放。想像中,方陣的上下環狀相連,左右亦環狀相連。

  4. 若下一個欲擺放的值為 k,而左上角方格已經有放置數字,則 k 擺放在 k-1 下方之方格。

請注意:魔術方陣之製作方式為上下對稱,左右對稱,亦可整個方陣旋轉 90 度、180 度、或 270 度。讀入一個 n 的奇數,3≤n<20,輸出一個 n 階的魔術方陣,並驗證其結果。你可參考此程式架構,以下是 9 階魔術方陣的執行範例:

Enter the size of the magic square: 9

  45  34  23  12   1  80  69  58  47
  46  44  33  22  11   9  79  68  57
  56  54  43  32  21  10   8  78  67
  66  55  53  42  31  20  18   7  77
  76  65  63  52  41  30  19  17   6
   5  75  64  62  51  40  29  27  16
  15   4  74  72  61  50  39  28  26
  25  14   3  73  71  60  49  38  36
  35  24  13   2  81  70  59  48  37

Horizontal row 0 check pass.
Horizontal row 1 check pass.
Horizontal row 2 check pass.
Horizontal row 3 check pass.
Horizontal row 4 check pass.
Horizontal row 5 check pass.
Horizontal row 6 check pass.
Horizontal row 7 check pass.
Horizontal row 8 check pass.
Vertical column 0 check pass.
Vertical column 1 check pass.
Vertical column 2 check pass.
Vertical column 3 check pass.
Vertical column 4 check pass.
Vertical column 5 check pass.
Vertical column 6 check pass.
Vertical column 7 check pass.
Vertical column 8 check pass.
Diagonal check pass.
Anti-diagonal check pass.

The magic square is correct. The total sum is 369.