#有点暴力枚举的意思:整体想法就是每次选择两个数!对!两个!(非常重要!) 把这两个数的计算结果 和之前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
'''