题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import itertools def cal(strings): nums = [] for c in strings: if c.isdigit(): if c == '0': nums.pop() nums.append(10) else: nums.append(int(c)) else: r = str(nums.pop()) l = str(nums.pop()) nums.append(eval(l + c + r)) return nums.pop() def shizi(num, ans, index): if ans: return True for opt1 in '+-*/': houzhui1 = num.copy() houzhui1.insert(index[0], opt1) for opt2 in '+-*/': houzhui2 = houzhui1.copy() houzhui2.insert(index[1], opt2) for opt3 in '+-*/': houzhui3 = houzhui2.copy() houzhui3.insert(index[2], opt3) try: if cal(houzhui3) == 24: return True except: continue return False ans = False num = list(input().split()) nums = list(itertools.permutations(num)) for num in nums: num = list(num) ans = shizi(num, ans, [2, 5, 6]) ans = shizi(num, ans, [4, 5, 6]) ans = shizi(num, ans, [3, 5, 6]) ans = shizi(num, ans, [3, 4, 6]) ans = shizi(num, ans, [2, 4, 6]) if ans: print('true') else: print('false')
思路很简单,由于考虑括号,直接转为后缀表达式,就不用考虑括号了,4个数的后缀表达式,只需要加3个符号,位置的可能性只有5种