题解 | 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
点赞 回复 分享
发布于 2024-10-11 17:30 安徽

相关推荐

2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
评论
14
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务