C語言填幻方(不要窮舉,要詳細講解)

時間 2021-05-04 18:24:41

1樓:世鑲柳

下面的夠詳細了吧

奇階幻方

當n為奇數時,我們稱幻方為奇階幻方。可以用merzirac法與loubere法實現,根據我的研究,發現用國際象棋之馬步也可構造出更為神奇的奇幻方,故命名為horse法。

偶階幻方

當n為偶數時,我們稱幻方為偶階幻方。當n可以被4整除時,我們稱該偶階幻方為雙偶幻方;當n不可被4整除時,我們稱該偶階幻方為單偶幻方。可用了hire法、 strachey以及yinmagic將其實現,strachey為單偶模型,我對雙偶(4m階)進行了重新修改,製作了另一個可行的數學模型,稱之為 spring。

yinmagic是我於2023年設計的模型,他可以生成任意的偶階幻方。

在填幻方前我們做如下約定:如填定數字超出幻方格範圍,則把幻方看成是可以無限伸展的圖形,如下圖:

merzirac法生成奇階幻方

在第一行居中的方格內放1,依次向左上方填入2、3、4…,如果左上方已有數字,則向下移一格繼續填寫。如下圖用merziral法生成的5階幻方:

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

loubere法生成奇階幻方

在居中的方格向上一格內放1,依次向右上方填入2、3、4…,如果右上方已有數字,則向上移二格繼續填寫。如下圖用louberel法生成的7階幻方:

30 39 48 1 10 19 28

38 47 7 9 18 27 29

46 6 8 17 26 35 37

5 14 16 25 34 36 45

13 15 24 33 42 44 4

21 23 32 41 43 3 12

22 31 40 49 2 11 20

horse法生成奇階幻方

先在任意一格內放入1。向左走1步,並下走2步放入2(稱為馬步),向左走1步,並下走2步放入3,依次類推放到n。在n的下方放入n+1(稱為跳步),再按上述方法放置到2n,在2n的下邊放入2n+1。

如下圖用horse法生成的5階幻方:

77 58 39 20 1 72 53 34 15

6 68 49 30 11 73 63 44 25

16 78 59 40 21 2 64 54 35

26 7 69 50 31 12 74 55 45

36 17 79 60 41 22 3 65 46

37 27 8 70 51 32 13 75 56

47 28 18 80 61 42 23 4 66

57 38 19 9 71 52 33 14 76

67 48 29 10 81 62 43 24 5

一般的,令矩陣[1,1]為向右走一步,向上走一步,[-1,0]為向左走一步。則馬步可以表示為2x+y,,y∈}∪,x∈}。對於2x+y相應的跳步可以為2y,-y,x,-y,x,3x,3x+3y。

上面的的是x型跳步。horse法生成的幻方為魔鬼幻方。

hire法生成偶階幻方

將n階幻方看作一個矩陣,記為a,其中的第i行j列方格內的數字記為a(i,j)。在a內兩對角線上填寫1、2、3、……、n,各行再填寫1、2、3、……、n,使各行各列數字之和為n*(n+1)/2。填寫方法為:

第1行從n到1填寫,從第2行到第n/2行按從1到進行填寫(第2行第1列填n,第2行第n列填1),從第n/2+1到第n行按n到1進行填寫,對角線的方格內數字不變。如下所示為6 階填寫方法:

1 5 4 3 2 6

6 2 3 4 5 1

1 2 3 4 5 6

6 5 3 4 2 1

6 2 4 3 5 1

1 5 4 3 2 6

如下所示為8階填寫方法**置以後):

1 8 1 1 8 8 8 1

7 2 2 2 7 7 2 7

6 3 3 3 6 3 6 6

5 4 4 4 4 5 5 5

4 5 5 5 5 4 4 4

3 6 6 6 3 6 3 3

2 7 7 7 2 2 7 2

8 1 8 8 1 1 1 8

將a上所有數字分別按如下演算法計算,得到b,其中b(i,j)=n×(a(i,j)-1)。則at+b為目標幻方

(at為a的轉置矩陣)。如下圖用hire法生成的8階幻方:

1 63 6 5 60 59 58 8

56 10 11 12 53 54 15 49

41 18 19 20 45 22 47 48

33 26 27 28 29 38 39 40

32 39 38 36 37 27 26 25

24 47 43 45 20 46 18 17

16 50 54 53 12 11 55 9

57 7 62 61 4 3 2 64

strachey法生成單偶幻方

將n階單偶幻方表示為4m+2階幻方。將其等分為四分,成為如下圖所示a、b、c、d四個2m+1階奇數幻方。

a cd b

a用1至2m+1填寫成(2m+1)2階幻方;b用(2m+1)2+1至2*(2m+1)2填寫成2m+1階幻方;c用2*(2m+1)2+1至3*(2m+1)2填寫成2m+1階幻方;d用3*(2m+1)2+1至4*(2m+1)2填寫成 2m+1階幻方;在a中間一行取m個小格,其中1格為該行居中1小格,另外m-1個小格任意,其他行左側邊緣取m列,將其與d相應方格內交換;b與c接近右側m-1列相互交換。如下圖用strachey法生成的6階幻方:

35 1 6 26 19 24

3 32 7 21 23 25

31 9 2 22 27 20

8 28 33 17 10 15

30 5 34 12 14 16

4 36 29 13 18 11

spring法生成以偶幻方

將n階雙偶幻方表示為4m階幻方。將n階幻方看作一個矩陣,記為a,其中的第i行j列方格內的數字記為a(i,j)。

先令a(i,j)=(i-1)*n+j,即第一行從左到可分別填寫1、2、3、……、n;即第二行從左到可分別填寫n+1、n+2、n+3、……、2n;…………之後進行對角交換。對角交換有兩種方法:

方法一;將左上區域i+j為偶數的與幻方內以中心點為對稱點的右下角對角數字進行交換;將右上區域i+j為奇數的與幻方內以中心點為對稱點的左下角對角數字進行交換。(保證不同時為奇或偶即可。)

方法二;將幻方等分成m*m個4階幻方,將各4階幻方中對角線上的方格內數字與n階幻方內以中心點為對稱點的對角數字進行交換。

如下圖用spring法生成的4階幻方:

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

yinmagic構造偶階幻方

先構造n-2幻方,之後將其中的數字全部加上2n-2,放於n階幻方中間,再用本方法將邊緣數字填寫完畢。本方法適用於n>4的所有幻方,我於2023年12月31日構造的數學模型。yinmagic法可生成6階以上的偶幻方。

如下圖用 yinmagic法生成的6階幻方:

10 1 34 33 5 28

29 23 22 11 18 8

30 12 17 24 21 7

2 26 19 14 15 35

31 13 16 25 20 6

9 36 3 4 32 27

魔鬼幻方

如將幻方看成是無限伸展的圖形,則任何一個相鄰的n*n方格內的數字都可以組成一個幻方。則稱該幻方為魔鬼幻方。

用我研究的horse法構造的幻方是魔鬼幻方。如下的幻方更是魔鬼幻方,因為對於任意四個在兩行兩列上的數字,他們的和都是34。此幻方可用yinmagic方法生成。

15 10 3 6

4 5 16 9

14 11 2 7

1 8 13 12

羅伯法:

1居上行正**,依次排開右上方。

右出格時寫最左,上出格時寫最下.

每逢幾個落一行.(幾個是幾*幾的方陣中的幾)

2樓:匿名使用者

樓上的,這裡

merzirac法生成奇階幻方

在第一行居中的方格內放1,依次向左上方填入2、3、4…,如果左上方已有數字,則向下移一格繼續填寫。如下圖用merziral法生成的5階幻方:

左上方應該是右上方吧^_^

樓主你去我部落格

填三階幻方的祕訣,三階幻方口訣

幻方 magic square 起源於 易 古 稱九宮 龜文 乃是我國最先發現的一個著名組合算題。易 算之於九宮,識之以天象,在古代天文 曆法 農牧生產與社會生活中具有廣泛的應用價值。易十數為體,為用,不離十。易 九宮算動態組合模型 河圖 洛書 八卦 是幻方的最簡模型。幻方是一個高深莫測的數學迷宮和...

《C語言程式設計》試題3求解請勿亂填非常感謝

y36,3 p next 4 return p data 37,5 x min 38,include int main for i 0 i 200 i printf d d d zheng,fu,ling return 0 第一位仁兄,第一題輸入,竟然寫成了printf。汗。最後一道我馬上看一下,用...

怎樣用c語言陣列來編2的100次方

int a int a,int b return j 在這上面打的,沒有編譯試一下,有錯的請包含。還有忽略一切錯誤檢測 include stdio.h int main 因為2的100次方結果資料太大,超過了long int 表示的資料,所以採用了double型別。 int array 40 arr...