题解 | 24点游戏算法
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
from itertools import permutations, product
def solve_24_game(nums):
op = ["+", "-", "*", "/"]
found = False
# 遍历所有数字的排列
for num_perm in permutations(nums):
# 遍历所有运算符的组合
for ops in product(op, repeat=3):
try:
# 情况 1: ((a op1 b) op2 c) op3 d
expr1 = f"({num_perm[0]}{ops[0]}{num_perm[1]})"
expr2 = f"({expr1}{ops[1]}{num_perm[2]})"
expr3 = f"({expr2}{ops[2]}{num_perm[3]})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
# 情况 2: (a op1 (b op2 c)) op3 d
expr1 = f"({num_perm[1]}{ops[1]}{num_perm[2]})"
expr2 = f"({num_perm[0]}{ops[0]}{expr1})"
expr3 = f"({expr2}{ops[2]}{num_perm[3]})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
# 情况 3: a op1 (b op2 (c op3 d))
expr1 = f"({num_perm[2]}{ops[2]}{num_perm[3]})"
expr2 = f"({num_perm[1]}{ops[1]}{expr1})"
expr3 = f"({num_perm[0]}{ops[0]}{expr2})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
# 情况 4: (a op1 b) op2 (c op3 d)
expr1 = f"({num_perm[0]}{ops[0]}{num_perm[1]})"
expr2 = f"({num_perm[2]}{ops[2]}{num_perm[3]})"
expr3 = f"({expr1}{ops[1]}{expr2})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
# 情况 5: a op1 ((b op2 c) op3 d)
expr1 = f"({num_perm[1]}{ops[1]}{num_perm[2]})"
expr2 = f"({expr1}{ops[2]}{num_perm[3]})"
expr3 = f"({num_perm[0]}{ops[0]}{expr2})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
# 情况 6: ((a op1 b) op2 (c op3 d))
expr1 = f"({num_perm[0]}{ops[0]}{num_perm[1]})"
expr2 = f"({num_perm[2]}{ops[2]}{num_perm[3]})"
expr3 = f"({expr1}{ops[1]}{expr2})"
result = eval(expr3)
if abs(result - 24.0) < 1e-6:
found = True
break
except ZeroDivisionError:
continue
if found:
break
return found
# 输入四个数字
nums = list(map(int, input().split()))
# 调用函数并输出结果
if solve_24_game(nums):
print("true")
else:
print("false")
