#有点暴力枚举的意思:整体想法就是每次选择两个数!对!两个!(非常重要!) 把这两个数的计算结果 和之前nums数组中其他元素组成的列表concate起来作为新的nums 向下递归 def jP24(nums): if len(nums)==1: return abs(24-nums[0])<=10**(-10) # 每次把计算结果 和之前nums数组中其他元素组成的列表concate起来 作为新的nums 向下递归 for i in range(len(nums)-1): for j in range(i+1,len(nums)): #加 if jP24([nums[i]+nums[j]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True #乘 if jP24([nums[i]*nums[j]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True #减(有顺序) if jP24([nums[i]-nums[j]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True if jP24([nums[j]-nums[i]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True #除(有顺序,且分母不等于0) if nums[j]!=0 and jP24([nums[i]/nums[j]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True if nums[i]!=0 and jP24([nums[j]/nums[i]]+nums[0:i]+nums[i+1:j]+nums[j+1:]): return True #走到这一步 说明之前都不行! # REMARK! return 相当于=break+print()! return False while 1: try: s=input().split() nums=[int(i) for i in s] print(str(jP24(nums)).lower()) except: break ''' #下面的做法是错误的:比如3+9+3*4=24 def func(nums,target_num): if len(nums)==1: return nums[0]==target_num elif func(nums[0:len(nums)-1],target_num-nums[-1]): return True elif func(nums[0:len(nums)-1],target_num+nums[-1]): return True elif func(nums[0:len(nums)-1],target_num/nums[-1]): return True elif func(nums[0:len(nums)-1],target_num*nums[-1]): return True else: return False while 1: try: s=input().split() nums=[int(i) for i in s] print(str(func(nums,24)).lower()) except: break '''