题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

s = [0,'A','2','3','4','5','6','7','8','9','10','J','Q','K']


# 使用深度优先搜索,按照全排列的方式进行加减乘除
def fun(x,visited,temp,res):
    if not any(visited):
        if res == 24:
            return True
        else:
            return False
    for i in range(4):
        if visited[i]:
            visited[i] = False
            y = s.index(x[i])
            # 备份当前结果
            original_res = res
            # +
            res += y
            temp.append('+')
            temp.append(x[i])
            if fun(x,visited,temp,res):
                return True
            res = original_res
            temp.pop()
            temp.pop()
            # -
            res -= y
            temp.append('-')
            temp.append(x[i])
            if fun(x,visited,temp,res):
                return True
            res = original_res
            temp.pop()
            temp.pop()
            # *
            res *= y
            temp.append('*')
            temp.append(x[i])
            if fun(x,visited,temp,res):
                return True
            res = original_res
            temp.pop()
            temp.pop()
            # /
            res //= y
            temp.append('/')
            temp.append(x[i])
            if fun(x,visited,temp,res):
                return True
            res = original_res
            temp.pop()
            temp.pop()
            visited[i] = True


while True:
    try:
        x = input().split()
        if 'joker' in x or 'JOKER' in x:
            print('ERROR')
            break        

        temp = [] # 用来记录中间变量
        visited = [True] * 4

        flag = 0

        for i in range(4):
            res = s.index(x[i])
            visited[i] = False
            temp.append(x[i])
            if fun(x,visited,temp,res):
                print(''.join(temp))
                flag = 1
                break
            visited[i] = True  # 回溯
            temp.pop()
        if flag == 0:
            print('NONE')
    except:
        break

全部评论

相关推荐

七牛云头号黑子:人家是过度包装被看出来没过简历,你是包都不包啊兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务