题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import sys


arr = [int(i) for i in input().strip().split()]


def dfs(arr, path, used):
    if len(path) == 4:
        return check(path)

    for i in range(0, len(arr)):
        if used[i]:
            continue
        used[i] = True
        path.append(arr[i])
        if dfs(arr, path, used):
            return True
        path.pop()
        used[i] = False

    return False


def check(arr):
    def add(a, b):
        return a + b

    def subtract(a, b):
        return a - b

    def multi(a, b):
        return a * b

    def divide(a, b):
        return a / b

    ops = {"+": add, "-": subtract, "*": multi, "/": divide}

    for op, fn in ops.items():
        if len(arr) == 2:
            if fn(*arr) == 24:
                return True
        else:
            if check([fn(*arr[:2]), *arr[2:]]):
                return True
    return False


ans = dfs(arr, [], [False] * len(arr))
print("true" if ans else "false")

#24点#
全部评论

相关推荐

09-23 20:50
门头沟学院 Java
有一道异或题,很有意思,给出了二进制以外的异或定义,还挺有道理的
我不是本人:感觉题目好难啊一个也没ac
投递百度等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-23 10:11
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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