给定任意四个正整数,任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24
下面是一种解法,本来用eval代码可以更精简的,不过eval一般不推荐使用,有兴趣的同学可以自己试试
import itertools
a='5 5 5 1'
#a='9 3 6 2'
b=list(map(lambda i:int(i),a.split()))
c=map(lambda i:list(i),set(itertools.permutations(b)))
def f1(x,y,n):
if n==0:
x+=y
elif n==1:
x-=y
elif n==2:
x*=y
elif n==3 and y!=0:
x/=y
else:
x=999999999
return x
f2=['+','-','*','/']
d=set(itertools.permutations(range(4),3))
e=set(itertools.product(range(3),range(2)))
for i in c:
for j in d:
for k in e:
v=f1(i[k[0]],i[k[0]+1],j[0])
l=i[0:k[0]]+[v]+i[k[0]+2:]
v=f1(l[k[1]],l[k[1]+1],j[1])
m=l[0:k[1]]+[v]+l[k[1]+2:]
v=f1(m[0],m[1],j[2])
if v==24:
u1='(%s%s%s)'%(i[k[0]],f2[j[0]],i[k[0]+1])
l[k[0]]=u1
u2='(%s%s%s)'%(l[k[1]],f2[j[1]],l[k[1]+1])
m[k[1]]=u2
u='(%s%s%s)=24'%(m[0],f2[j[2]],m[1])
print(u)