题解 | #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')

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务