python 九个数能否组成九宫格的判断

九个数代表着九宫格中的九个位置

a

b

c

d

e

f

g

h

i

对于九宫格的性质,  假如九宫格的总和为M,则

e=M/9, 且任意某行或者某列的和为3e

任意给定九个数,我们可以先进行判断是否符合满足九宫格的前提条件,将此九个数从小到大排序排序,验证其如下的性质

  1. 总和M能否被9整除,整除获得的数是否在这九个数之中(最终符合的话 为上图中的e)
  2. 如上图的九宫格  a+i=c+g=b+h=d+f=2e, 除了e之外的另8个数两 两结合成加法对;  此时的4个加法对分别是 最大值与最小值相加;第二 大与第二小的数值相加....... 如果不这样,假如是最大值与第二小的值相 加,那么肯定存在一个加法对,其包含了最小值和另外一个数,这个加法对 无论如何小于最大值与第二小值相加的和,不满足条件(所有值相等的情 况除外)

满足了上面两个条件,就满足了的组成九宫格的基本条件,再按九宫格的口诀进行数字的填写及验证,详细的代码见如下

'''
整体思路:
    对给定的列表排序
    判断是否满足组成九宫格的基本条件
    满足后按'二,四为肩,六,八为足。上九下一,左七右三'进行填充二维列表,并做进一步的判断
'''

def list_confirmation(li):
    # 使用冒泡排序法对列表进行排序
    for i in range(len(li)-1):
        for j in range(len(li)-i-1):
            if li[j]>li[j+1]:
                li[j],li[j+1]=li[j+1],li[j]


    # 组成九宫格的基本条件判断,文档中有说明
    if sum(li) % 9 == 0 and sum(li) / 9 == li[int((len(li) - 1) / 2)]:
        # 满足了基本信息,接下来进行九宫格的填充后的判断,将九个数字放在一个二维的列表中
        new_li = [[li[1], li[8], li[3]],
                  [li[6], li[4], li[2]],
                  [li[5], li[0], li[7]]]
        sum_li = []
        for i in range(8):
            sum_li.append(0)
        for j in range(3):
            sum_li[0] += new_li[0][j]
            sum_li[1] += new_li[1][j]
            sum_li[2] += new_li[2][j]
            sum_li[3] += new_li[j][0]
            sum_li[4] += new_li[j][1]
            sum_li[5] += new_li[j][2]
            sum_li[6] += new_li[j][j]
            sum_li[7] += new_li[j][2 - j]
        if sum_li[0] == sum_li[1] == sum_li[2] == sum_li[3] == sum_li[4] == sum_li[5] == sum_li[6] == sum_li[7]:
            print('成功')
        else:
            print('失败')
    else:
        print('失败')

if __name__ == '__main__':
    # 此处修改 li进行测试,能组成九宫格返回成功,否则返回失败
    li=[2,4,6,8,10,12,18,16,14]
    list_confirmation(li)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值