闲得无聊,写了个算24点的程序,思想很简单,使用递归,从数组中取出第一个数,然后遍历取出第二个数,将这两个数学做任意四则运算后,放到剩下的数组里,直到只剩最后一个数。
def f(L):
n=len(L)
if n==1:
if abs(L[0]-24)<0.001:
return True
else:
return False
a=L[0]
for b in L[1:]:
s=a+b
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}+{}={}'.format(a,b,s))
return True
s=a-b
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}+{}={}'.format(a,b,s))
return True
s=b-a
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}-{}={}'.format(b,a,s))
return True
s=a*b
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}*{}={}'.format(a,b,s))
return True
if a :
s=b/a
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}/{}={}'.format(b,a,s))
return True
if b :
s=a/b
LL=L[1:]
LL.remove(b)
if f([s]+LL)==True:
print('{}/{}={}'.format(a,b,s))
return True
>>> f([3,3,8,8])
8/0.3333333333333335=23.99999999999999
3-2.6666666666666665=0.3333333333333335
8/3=2.6666666666666665