题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#参考大佬穷举的代码,做了优化,只选取不重复的两个数进行递归 def dfs(nums): if not nums: return False if len(nums) == 1: return abs(nums[0] - 24) < 1e-6 for i in range(0,len(nums)): # 获取第一个数字 for j in range(i+1,len(nums)): # 获取第二个数字 # 控制不重复 newNums = list() for k in range(len(nums)): # 获取第三个数字 if k != i and k != j: newNums.append(nums[k]) for k in range(4): if k < 2 and i > j: # 对于+和*操作来说不需要考虑两者的顺序,因此舍去一种 continue if k == 0: newNums.append(nums[i]+nums[j]) if k == 1: newNums.append(nums[i]*nums[j]) if k == 2: newNums.append(nums[i]-nums[j]) if k == 3: if abs(nums[j]) < 1e-6: # 排除除数为0的情况 continue newNums.append(nums[i]/nums[j]) if dfs(newNums): return True newNums.pop() return False while True: try: lst = [int(x) for x in input().split()] if dfs(lst): print('true') else: print('false') except: break;