蓝桥杯真题——幻方填空python讲解

题目如下:
幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。

欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。

他把1,2,3,...16 这16个数字填写在4 x 4的方格中。

如图p1.jpg所示,即:

16 ? ? 13
? ? 11 ?
9 ? ? *
? 15 ? 1

表中有些数字已经显露出来,还有些用?和*代替。

请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本题答案提交。

蓝桥杯真题——幻方填空python讲解_第1张图片

我们直接进行暴力求解,先写出剩余数字,写成列表,进行遍历,然后创建一个我们的幻方,没有数字的暂时为0,之后遍历写好的列表,替换数字,在进行横竖交叉求和,如果答案相同,我们就输出我们要的数字,但是注意,列表的数字被选择后一定删除,以后再加进去。

x = [[16, 0, 0, 13], [0, 0, 11, 0], [9, 0, 0, 0], [0, 15, 0, 1]]
m = [2, 3, 4, 5, 6, 7, 8, 10, 12, 14]
for i in range(len(m)):
    x[0][1] = m[i]
    m.pop(i)
    for n in range(len(m)):
        x[0][2] = m[n]
        m.pop(n)
        for a in range(len(m)):
            x[1][0] = m[a]
            m.pop(a)
            for b in range(len(m)):
                x[1][1] = m[b]
                m.pop(b)
                for c in range(len(m)):
                    x[1][3] = m[c]
                    m.pop(c)
                    for d in range(len(m)):
                        x[2][1] = m[d]
                        m.pop(d)
                        for e in range(len(m)):
                            x[2][2] = m[e]
                            m.pop(e)
                            for f in range(len(m)):
                                x[2][3] = m[f]
                                m.pop(f)
                                for g in range(len(m)):
                                    x[3][0] = m[g]
                                    m.pop(g)
                                    x[3][2] = m[0]
                                    sum1 = sum(x[0])
                                    sum2 = sum(x[1])
                                    sum3 = sum(x[2])
                                    sum4 = sum(x[3])
                                    sum5 = x[1][0] + x[0][0]+x[2][0]+x[3][0]
                                    sum6 = x[1][1] + x[0][1]+x[2][1]+x[3][1]
                                    sum7 = x[1][3] + x[0][3]+x[2][3]+x[3][3]
                                    sum8 = x[1][2] + x[0][2]+x[2][2]+x[3][2]
                                    sum9 = x[0][0] + x[1][1] + x[2][2] + x[3][3]
                                    sum10 = x[0][3] + x[1][2] + x[2][1] + x[3][0]
                                    if sum1 == sum2 ==sum3 ==sum4==sum5==sum6 ==sum7==sum8==sum9==sum10:
                                        print(x[2][3])
                                    m.insert(g, x[3][0])
                                m.insert(f, x[2][3])
                            m.insert(e, x[2][2])
                        m.insert(d, x[2][1])
                    m.insert(c, x[1][3])
                m.insert(b, x[1][1])
            m.insert(a, x[1][0])
        m.insert(n, x[0][2])
    m.insert(i, x[0][1])

你可能感兴趣的:(python,列表,python)