题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
采用了dfs,符合条件就保存到list2中,并且返回,继续回溯找到所有的情况。 list1=input().split() dict1={'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'J':11,'Q':12,'K':13,'A':1} list2=[] # 存放符合条件的 # 定义递归调用的函数 def func(list1,res_str,res_num): if len(list1)==0: # 递归结束条件 if res_num==24: list2.append(res_str) return for i in range(len(list1)): func(list1[0:i]+list1[i+1:],f'{res_str}+{list1[i]}',res_num+int(dict1[list1[i]])) func(list1[0:i]+list1[i+1:],f'{res_str}-{list1[i]}',res_num-int(dict1[list1[i]])) func(list1[0:i]+list1[i+1:],f'{res_str}*{list1[i]}',res_num*int(dict1[list1[i]])) func(list1[0:i]+list1[i+1:],f'{res_str}/{list1[i]}',res_num//int(dict1[list1[i]])) return if 'joker' in list1 or 'JOKER' in list1: print('ERROR') else: for i in range(len(list1)): # 取出列表第一个元素,带入函数 func(list1[0:i]+list1[i+1:],list1[i],int(dict1[list1[i]])) if len(list2)>0: print(list2[0]) else: print('NONE')