題目: 將1~n的數子排列在n*n的方陣上,要求數子不能重複,方陣各行、各列、及兩條對角線的數子之和相等。此位魔方陣,又稱洛書(洛書是九行九列)。若n為奇數,則為奇數階魔方陣。
解題方法:洛書的排列規律如下:
⑴將1放在第一行中間一列;
⑵從2開始直到n×n止各數依次按下列規則存放;每乙個數存放的行比前乙個數的行數減1,列數加1(例如上面的三階魔方陣,5在4的上一行後一列);
⑶如果上乙個數的行數為1,則下乙個數的行數為n(指最下一行);例如1在第一行,則2應放在最下一行,列數同樣加1;
⑷當上乙個數的列數為n時,下乙個數的列數應為1,行數減去1。例如2在第3行最後一列,則3應放在第二行第一列;
⑸如果按上面規則確定的位置上已有數,或上乙個數是第一行第n列時,則把下乙個數放在上乙個數的下面。例如按上面的規定,4應該放在第1行第2列,但該位置已經被佔據,所以4就放在3的下面。
綜合上述規則,我們發現:若數子除以n的餘數為一,則他必定填在上乙個數的下邊
#include
#include
#include
#include
#define maxnum 16
using
namespace std;
intmain()
square[i]
[j]=key;
}for
(i=1
;i<=n; i++
)return0;
}
輸出奇數N階魔方陣 幻方陣
從鍵盤輸入乙個奇數n,輸出n階 魔方陣 所謂魔方陣是指這樣的方陣,它的每一行 每一列和對角線之和均相等。例如3階魔方陣為 8 1 6 3 5 7 4 9 2 魔方陣的奇數排列規律是 1 將1放在第一行中間一列 2 從2開始直到n n止各數依次按下列規則存放 按 45 方向向右上走,每乙個數存放的行比...
魔方陣 奇數階 單偶數階 雙偶數階
include include include int magic1 int n 奇數階魔方陣 int row 0 int col n 2 for int i 0 ireturn arr int magic2 int n 單偶數階魔方陣 能被2整除,不能被4整除 思路 可以分為4個奇數階矩陣 int...
魔方陣 奇數階 單偶數階 雙偶數階
include include include int magic1 int n 奇數階魔方陣 int row 0 int col n 2 for int i 0 i return arr int magic2 int n 單偶數階魔方陣 能被2整除,不能被4整除 思路 可以分為4個奇數階矩陣 in...