题解 | #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点#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务