iT邦幫忙

1

【zerojudge惡龍題】- d762: 10344 - 23 out of 5,用五個數字湊出23

參考題目: d762: 10344 - 23 out of 5
題意:
給你五個整數a1, a2, a3, a4, a5(範圍在0~50)之間,
問你有沒有辦法讓運算式(((a1 O1 a2) O2 a3) O3 a4) O4 a5的結果等於23?
O1, O2, O3, O4是運算子{+,-,*}的其中一個

譬如給你2,3,5,7,11
由於(((11*3)-5)+2)-7=23,答案為可以

題解

這一題有一個更難的版本,
就是括號可以任意加,
但是這一題括號的順序是固定的,
等於可以窮舉所有a1~a5的排列(5!=120種)及所有O1, O2, O3, O4的重複排列(共3的4次方=81種),
再代入指定的括號順序就好

這邊我們用python的一個逆天函數eval()
eval()的效果可以將一個字串當作「程式碼」來執行,
例如eval('3+4')會得到7

因此本題用python解起來意外的很簡單

from itertools import permutations, product

ops=['+', '-', '*']
                
def makeNSolver(nums):
    for per in permutations(nums):
        for p in product(ops, repeat=4):
            if eval(f'((({per[0]} {p[0]} {per[1]}) {p[1]} {per[2]}) {p[2]} {per[3]}) {p[3]} {per[4]}')==23:
                return True
    return False

while True:
    nums = list(map(int, input().split()))
    if all([n==0 for n in nums]):
        break
    else:
        print("Possible" if makeNSolver(nums) else "Impossible")

尚未有邦友留言

立即登入留言