题解 | #24点游戏算法# 枚举俩括号的5种顺序
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import itertools def calculate24(nums): operators = ['+', '-', '*', '/'] def operate(a, b, operator): if a == None or b == None or (abs(b) < 1e-6 and operator == '/'): return None if operator == '+': return a + b elif operator == '-': return a - b elif operator == '*': return a * b elif operator == '/': return a / b def evaluate_expression(expr): num, op = [], [] for item in expr: if item in operators: op.append(item) elif item.isdigit(): num.append(int(item)) elif item == ')': b = num.pop() a = num.pop() num.append(operate(a, b, op.pop())) if len(num) > 1: # 不然就在下个函数定义内,把第3个右括号加到每个expr末尾 b = num.pop() a = num.pop() num.append(operate(a, b, op.pop())) return num[0] def generate_expressions_with_brackets(perm): expressions = [] for op1 in operators: for op2 in operators: for op3 in operators: expressions.append([perm[0], op1, '(', '(', perm[1], op2, perm[2], ')', op3, perm[3], ')']) # 2 3 1 expressions.append([perm[0], op1, '(', perm[1], op2, '(', perm[2], op3, perm[3], ')', ')']) # 3 2 1 expressions.append(['(', '(', perm[0], op1, perm[1], ')', op2, perm[2], ')', op3, perm[3]]) # 1 2 3 expressions.append(['(', perm[0], op1, '(', perm[1], op2, perm[2], ')', ')', op3, perm [3]]) # 2 1 3 expressions.append(['(', perm[0], op1, perm[1], ')', op2, '(', perm[2], op3, perm[3], ')']) # 1 3 2 = 3 1 2 return expressions for perm in itertools.permutations(nums): for expr in generate_expressions_with_brackets(perm): result = evaluate_expression(expr) if result is not None and abs(result - 24) < 1e-6: return True return False if calculate24(input().split(' ')): print('true') else: print('false')#刷题#