创建幻方(Magic Square) 3x3

# 基准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 = []
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值