1. 程式人生 > 其它 >藍橋杯每日一題(11):幻方填空(python)

藍橋杯每日一題(11):幻方填空(python)

技術標籤:藍橋杯pythonnumpypython

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