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