幻方简易解法/无限洛书解法

幻方简易解法/无限洛书解法

首页休闲益智幻字立方游戏更新时间:2024-05-11

1.引语

在九宫格里,填入1到9,使每行、每列、对角线的和相等。这似乎并不难,但是把他扩展到,在n乘n中,填入1到n*n,使每行、每列、对角线的和相等;有没有通用的解法?下面一起探讨一下。

8

1

6

3

5

7

4

9

2

2.当n=3,5,7...等奇数时,只需三个步骤即可得出结果。

1)在最外边上的中间格上填1,下面以5阶为例,如第1行的第3格。

2)按45%斜线依次填入数字

3)每当填到数字被占用时(每填n的倍数后出现,如例中5,10等后面),该数字填在前数字的邻格,如6填在5的下面一格。

奇阶过程示意图

5阶一种填法结果

3.当n等于4的倍数时,也只需3个步骤。

1)顺序填入数字

2)做标记,按1,2,3,4=不标,标,标,不标,即如 - - , - - 的方式标记,8阶例子如图。

3)有标记的转为对应的补数,即x的补数记为x̅,x x̅=对和,x̅=对和 - x或记为-x,如例中

-1=对和-1=(1 64)-1=64,对和=1 64=2 63,例中每行和=对和*8/2,对和=1 n*n

先标记一行,后标记一列

完整标记

8阶结果

4)本解法即有每个格只需一个公式得出。第i行j列的值记为aij

imark = (-1) ^ Int((i Mod 4) / 2) * ((-1) ^ Int((j Mod 4) / 2))

aij=(1 - imark) / 2 * (n * n 1) imark * ((i - 1) * n j)

4.当n=6,10等即4的倍数 2时,有两种解法

1)中间转为降2次的解法,6>4,10>8等等;外四边修正一下。

2)转为4个n/2的奇数阶解法,修正一下。

4.1)4m 2降为4m解法

以6阶为例,如图,中间记为大0,四角依次为1,2,-2,-1。第一行依次填3,4,5,6;第一列依次填7,8,9,10;当1 2 3 4 5 6=21为奇数,有限加减不能为偶数,不可能得到0,此时5和10交换,第一行可有1-3-4 10-6 2=0,第一列可有1 7 8-9-5-2=0。

10阶时第一行,顺序加入4个数,可解11-12-13 14=0,依次类推。降为4m的第一个数为2n-1。

先解4边

补全右下角补全中间

6阶最后结果

4.2)4m 2转为4个奇数阶

1)四个部分ABCD,按ACDB排列(如例),A按1开始的奇数法填写,B=A 积,C=A 2积,D=A 3积,积=max(A)=n/2 * n/2 =(2m 1)*(2m 1)

10阶ABCD分布

2)B和C从最右边开始交换m-1列

3)A和D交换,每行交换m个数字,一个方法是每行交换第1到第m个数,中间一行交换第2到m 1个数,A最中间的数要交换。

10阶化奇数解法结果

5.VBA编程代码

Sub Magicij()

’cn = ThisWorkbook.Sheets("幻方").Range("I3")

Dim arr_magic()

ReDim arr_magic(cn, cn)

If cn Mod 4 = 0 Then

For i = 1 To cn

For j = 1 To cn

'标记值1或-1,无标记为1,有标记为-1。

imark = (-1) ^ Int((i Mod 4) / 2) * ((-1) ^ Int((j Mod 4) / 2))

arr_magic(i, j) = (1 - imark) / 2 * (cn * cn 1) imark * ((i - 1) * cn j)

Next

Next

Else

If cn Mod 4 = 2 Then

'中间部分转为相邻低阶的双偶解法,即6转为4,10转为8,依次类推

cm = cn - 2

For i = 1 To cm

For j = 1 To cm

imark = (-1) ^ Int((i Mod 4) / 2) * (-1) ^ Int((j Mod 4) / 2)

arr_magic(1 i, 1 j) = (1 - imark) / 2 * (cn * cn 1) imark * ((i - 1) * cm j 2 * cm 2)

Next

Next

'固定部分 1 -3 -4 10 -6 2,三负三正和为0

'固定部分 1 7 8 -9 -5 -2

arr_magic(1, 1) = 1

arr_magic(1, 2) = -3

arr_magic(1, 3) = -4

arr_magic(1, 4) = 10

arr_magic(1, 5) = -6

arr_magic(1, cn) = 2

arr_magic(2, 1) = 7

arr_magic(3, 1) = 8

arr_magic(4, 1) = -9

arr_magic(5, 1) = -5

arr_magic(cn, 1) = -2

arr_magic(cn, cn) = -1

'每增加4个数,可用前面的解法处理(1 4=2 3)

For i = 6 To cn - 1

imark = (-1) ^ Int((((i - 5) Mod 4) / 2))

arr_magic(1, i) = imark * (5 i)

arr_magic(i, 1) = imark * (cn - 1 i)

Next

'右下角=左上角的负数

For i = 1 To cn - 2

arr_magic(cn, i 1) = -arr_magic(1, i 1)

arr_magic(i 1, cn) = -arr_magic(i 1, 1)

Next

For i = 1 To cn

For j = 1 To cn

If arr_magic(i, j) < 0 Then

arr_magic(i, j) = cn * cn 1 arr_magic(i, j)

End If

Next

Next

Else

'奇数阶解法

i = Int(cn / 2) 1

j = cn

For k = 1 To cn * cn

arr_magic(i, j) = k

If k Mod cn = 0 Then

j = (j - 1) Mod cn

Else

i = (i - 1) Mod cn

j = (j 1) Mod cn

End If

If i = 0 Then

i = cn

End If

If j = 0 Then

j = cn

End If

Next

End If

End If

ThisWorkbook.Sheets("幻方").Range(Cells(4, 8), Cells(cn 4, cn 8)) = arr_magic

End Sub

6.总结

通解可以从简单的3,4阶开始研究,后面的最好可以转化为前面的解法。

奇数的解法可以尝试不同的初始点1和不同的方向,四边的四个中点,一个点有2个方向,占用格后也有2种填法,最少有16种方法可行。

奇数阶多种解法导图

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved