提供一个思路吧
排列 + 逆波兰表达式
# 建立一个逆波兰表达式, # A B OP C OP D OP 为合法的逆波兰表达式 # A B OP C D OP OP 也是合法的 """ def calc(ex): nums = [] for i in ex: if i in '+-*/': if len(nums) < 2: return False b = nums.pop() a = nums.pop() if i == '/' and eval(b) == 0: return False nums.append(str(eval(a + i + b))) else: nums.append(i) # if eval(nums[0]) == 24: print(ex) # print the correct expression return eval(nums[0]) == 24 import itertools import sys for line in sys.stdin: inp = line.split() isfind = False for nums in itertools.permutations(inp): nums = list(nums) for op1, op2, op3 in itertools.product('+-*/', '+-*/', '+-*/'): if (calc(nums[:2] + [op1] + nums[2:3] + [op2] + nums[3:4] + [op3]) or calc(nums[:2] + [op1] + nums[2:4] + [op2, op3]) or calc(nums[:3] + [op1, op2] + nums[3:4] + [op3]) or calc(nums[:3] + [op1] + nums[3:4] + [op2, op3]) or calc(nums[:4] + [op1, op2, op3])): print('true') isfind = True break if isfind: break if not isfind: print('false')