题解 | dfs递归#24点游戏算法#

24点游戏算法

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

import copy
def dps(num):
    if len(num)==1:
        return abs(abs(num[0]) - 24) < 0.00001 
    for i in range(len(num)):
        for j in range(i+1, len(num)):
            n1,n2= num[i], num[j]
            rst = num[:i] + num[i+1:j] + num[j+1:]
            if dps([n1+n2]+rst):return True
            if dps([n1-n2]+rst):return True
            if dps([n1*n2]+rst):return True
            if n1!=0:
                if dps([n2/n1]+rst):
                    return True
            if n2!=0:
                if dps([n1/n2]+rst):
                    return True
    return False


while True:
    try:
        x = list(map(int,input().split()))
        print("true" if dps(x) else "false")
    except:
        break
        
全部评论
第10行到第11行好像少了一个n2-n1的判断。
点赞 回复 分享
发布于 2022-11-07 15:21 广东
这个递归有点问题,虽然能过例子,但是少了很多种组合。 建议在6-7行中间加上"if i != j:"判断
点赞 回复 分享
发布于 2023-04-23 15:17 浙江
3 8 10 1怎么组合成24,这个要求每个数字必须使用吗,看了好多代码返回都是True
点赞 回复 分享
发布于 10-11 17:30 安徽

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
14 收藏 评论
分享
牛客网
牛客企业服务