闲得无聊,写了个算24点的程序,思想很简单,使用递归,从数组中取出第一个数,然后遍历取出第二个数,将这两个数学做任意四则运算后,放到剩下的数组里,直到只剩最后一个数。

    1. def f(L):
    2. n=len(L)
    3. if n==1:
    4. if abs(L[0]-24)<0.001:
    5. return True
    6. else:
    7. return False
    8. a=L[0]
    9. for b in L[1:]:
    10. s=a+b
    11. LL=L[1:]
    12. LL.remove(b)
    13. if f([s]+LL)==True:
    14. print('{}+{}={}'.format(a,b,s))
    15. return True
    16. s=a-b
    17. LL=L[1:]
    18. LL.remove(b)
    19. if f([s]+LL)==True:
    20. print('{}+{}={}'.format(a,b,s))
    21. return True
    22. s=b-a
    23. LL=L[1:]
    24. LL.remove(b)
    25. if f([s]+LL)==True:
    26. print('{}-{}={}'.format(b,a,s))
    27. return True
    28. s=a*b
    29. LL=L[1:]
    30. LL.remove(b)
    31. if f([s]+LL)==True:
    32. print('{}*{}={}'.format(a,b,s))
    33. return True
    34. if a :
    35. s=b/a
    36. LL=L[1:]
    37. LL.remove(b)
    38. if f([s]+LL)==True:
    39. print('{}/{}={}'.format(b,a,s))
    40. return True
    41. if b :
    42. s=a/b
    43. LL=L[1:]
    44. LL.remove(b)
    45. if f([s]+LL)==True:
    46. print('{}/{}={}'.format(a,b,s))
    47. return True
    1. >>> f([3,3,8,8])
    2. 8/0.3333333333333335=23.99999999999999
    3. 3-2.6666666666666665=0.3333333333333335
    4. 8/3=2.6666666666666665