最开始题目理解错了,卡在80%调试了半天,最后理解下来是不管重复与否,输入的数字每个都用一次就行了。
m1=input().split()
n1='24'
def math(m,n):
x='+-*/' #初始化4种运算符号
if len(m)==2: # 当m只剩两个数时计算结果并结束递归
for j in range(4):
# +和*还可以优化,这里遇到-和/要考虑一下顺序问题
if eval(n+x[j]+m[0])==float(m[1]) or eval(n+x[j]+m[1])==float(m[0]): return True
elif len(m)>2:
for i in range(len(m)):
m2=[] #初始化一个m2 递减用
for i0 in range(len(m)):
if i0!=i: m2+=[m[i0]]
for j in range(4):
n2 = eval(n+x[j]+m[i]) #计算上一个节点结果
if math(m2,str(n2)): return True #递归计算,如果结果为真结束返回值并结束递归
if math(m1,n1): print('true')
else: print('false') #递归完都没有结果返回false



京公网安备 11010502036488号