题解 | #24点游戏算法#
24点游戏算法
http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
'''
每次选两个数出来使用四则运算计算结果后,将新的数加入数组重复递归
如果最后只剩一个元素24那么就找到了,为什么不直接等于24是因为在除法的时候double有一些精度偏差
'''
def func(arr):
if len(arr) == 1:
return abs(arr[0]-24) < 0.1**6
for i in range(len(arr)-1):
for j in range(i+1, len(arr)):
if func( [arr[i]+arr[j]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
if func( [arr[i]*arr[j]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
if func( [arr[i]-arr[j]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
if func( [arr[j]-arr[i]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
if arr[j]!=0 and func( [arr[i]/arr[j]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
if arr[i]!=0 and func( [arr[j]/arr[i]] + arr[:i] + arr[i+1:j] + arr[j+1:]):
return True
return False
while 1:
try:
if func(list(map(int, input().split()))):
print('true')
else:
print('false')
except:
break