最开始题目理解错了,卡在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