from itertools import permutations, product
"""permutations 求全排列"""
"""product 求集合笛卡尔集(求组合) repeat"""
# 24点游戏,遍历所有可能
nums = list(map(int, input().split()))
def solve_24(nums):
# 定义四则运算函数
def calculate(a, b, op):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '/':
if b == 0: # 避免除零错误
return None
return a / b
return None
# 递归检查所有可能的运算组合 顺序执行就行
def check(nums, ops):
if len(nums) == 1:
# 检查是否接近24(考虑浮点数精度)
return abs(nums[0] - 24) < 1e-6
for i in range(len(nums) - 1):
a, b = nums[i], nums[i + 1]
op = ops[i]
res = calculate(a, b, op)
if res is None: # 如果运算无效(如除零),跳过
continue
# 生成新的数字和运算符列表
new_nums = nums[:i] + (res,) + nums[i + 2:]
new_ops = ops[:i] + ops[i + 1:]
if check(new_nums, new_ops):
return True
return False
# 遍历所有数字排列和运算符组合
for num_perm in permutations(nums): # permutation求全 排列
for ops in product('+-*/', repeat=3): # 3个运算符 product求全 组合
if check(num_perm, ops):
return True
return False
res = solve_24(nums)
if not res:
print('false')
else:
print('true')
24点总共4个数字,共24种排列,3个符号组合,4*4*4共64种组合。所以无非24*64=1536种不同方式。直接遍历所有可能。这里使用permutation求全排列和product求全组合是python独特的优势了。

京公网安备 11010502036488号