蓝桥杯每日一题(11):幻方填空(python)

Topic:

幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。
欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。
他把1,2,3,…16 这16个数字填写在4 x 4的方格中。
如图所示,即:
16 ? ? 13
? ? 11 ?
9 ? ? *
? 15 ? 1
表中有些数字已经显露出来,还有些用?和*代替。
请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本题答案提交。

在这里插入图片描述

Solution:

对于填空题最简单的思路就是暴力
将剩余未填入的数放入nums
对nums进行全排列
之后按照顺序填入数组中
计算行、列、两条对角线的数字之和
输出都相等时*的值

Code:

nums = itertools.permutations([2, 3, 4, 5, 6, 7, 8, 10, 12, 14])

for i in nums:
    num = list(i)
    sum_1 = 16 + num[0] + num[1] + 13
    sum_2 = num[2] + num[3] + 11 + num[4]
    sum_3 = 9 + num[5] + num[6] + num[7]
    sum_4 = num[8] + 15 + num[9] + 1
    sum_5 = 16 + num[2] + 9 + num[8]
    sum_6 = num[0] + num[3] + num[5] + 15
    sum_7 = num[1] + 11 + num[6] + num[9]
    sum_8 = 13 + num[4] + num[7] + 1
    sum_9 = 16 + num[3] + num[6] + 1
    sum_10 = 13 + 11 + num[5] + num[8]

    if sum_1 == sum_2 == sum_3 == sum_4 == sum_5 \
            == sum_6 == sum_7 == sum_8 == sum_9 == sum_10:
        print(num[7])
        break

Answer:

12

猜你喜欢

转载自blog.csdn.net/weixin_50791900/article/details/112756255