# 基准square
"""
1,2,3,4,5,6,7,8,9
total sum = (9*(9+1))/2=45
sum for each raw line = 45/3 = 15
#选中心数字
4个even number,5个odd number
如果要三个数相加等于15(odd number),那么另外两个数的组合需要是even+even+odd或者odd+odd+odd
所以需要选odd为中心数字(会被计算4次,并且会有和其他每一个数字相加的机会)
奇数有:1,3,5,7,9
如果选1,剩下组合和要为14, 只有[5,9]一个组合,只有一次机会凑满15
如果选3,剩下组合和要为12,只有[9,3][8,4][7,5]三个组合
如果选5,剩下组合和要为10,有[9,1][8,2][7,3][6,4]个组合
如果选7,剩下组合和要为8, 但是9+8>15
同理,9也不行
所以选择5为中心数字
#确定组合
如果[9,1]放在对角线,9的三条线,每边剩下的组合和要为6,但只有[1,5][2,4]可以满足,所以[9,1]只能放在非对角线,比如
x 1 x
x 5 x
x 9 x
剩下一组和9相加为15的是[2,4],所以
x 1 x
x 5 x
2 9 4
斜对角[5,4]和[2,5]剩下只能是:8,6,所以
6 1 8
x 5 x
2 9 4
剩下[3,7],填入:
6 1 8
7 5 3
2 9 4
#变形
把这个square旋转,镜像,都可以满足各行列和都等于15的条件,所以一共有8种情况(旋转有4各方向,每个方向可以多一个镜像)
"""
sq = [
[6,1,8],
[7,5,3],
[2,9,4]
]
# 镜像
def reflection(sq):
#res = [i[::-1] for i in sq]
res = []
for i in range(len(sq)):
lst = []
创建幻方(Magic Square) 3x3
于 2023-05-08 18:33:16 首次发布