题解 | #24点游戏算法#
24点游戏算法
http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
答案里经常出现的help函数算递归解的方法没办法计算两个乘号一个加号的情况 测试可以考虑基础情况(64),无法实现24的情况(1004),一定要有优先级的情况(2 2 10 1),无法递归解的情况(2 2 7 5)
import itertools#注意两个乘法一个加法和需要括号才能凑24点的情况!括号是可以被使用的
while True:
try:
nums = list(map(str, input().split()))
op = ['+', '-', '*', '/']
flag = False#标志位初始化
p = list(itertools.permutations(nums))
#全排列所有数字和符号出现的可能,注意permutations计算列表返回列表,eval计算字符串返回整数
for q in p:
for i in op:
for j in op:
for k in op:#区分优先级
inter1 = eval(q[0] + i + q[1])
inter2 = eval(str(inter1) + j + q[2])
inter3 = eval(str(inter2) + k + q[3])
if inter3 == 24:
flag = True
#以下是不能使用括号的情况,没有优先级
#if eval(q[0] + i + q[1] + j + q[2] + k + q[3]) == 24:
# flag = True
if flag:
print('true')
else:
print('false')
except:
break