题解 | #24点游戏算法#

24点游戏算法

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

def helper(arr,item):#先写一个利用递归+枚举解决算24的程序
    if item<1:
        return False
    if  len(arr)==1:#递归终点,当数组arr只剩一个数的时候,判断是否等于item
        return arr[0]==item
    else:#如果arr不是只剩一个数,就调用函数本身(直到只剩一个为止返回真假) 
        for i in range(len(arr)):
            m=arr[0:i]+arr[i+1:]
            n=arr[i]
            if helper(m,item+n) or helper(m, item-n) or helper(m, item*n) or helper(m, item/n):
                return True
        return False

while True:
    try:
        if helper(list(map(int,input().split())), 24):
            print('true')
        else:
            print('false')
    except:
        break
全部评论
缺乏去重判断
1 回复 分享
发布于 2022-03-18 22:32
1 1 5 7 就通不过啦。这个代码只能把 4 个数字拆成 2 + 1 + 1 去算,如果实际必须拆成 2 + 2 才能算出来的话,这代码就不行啦
10 回复 分享
发布于 2022-03-28 22:04
反向递归的思想只能用于顺序计算,2 * 5 + 2 * 7这类的需要先乘后加的无法实现
8 回复 分享
发布于 2022-03-24 20:51
递归函数的第一个if判断有什么作用呢
4 回复 分享
发布于 2022-03-17 10:39
我这个又当如何,哈哈哈,简单粗暴:https://www.nowcoder.com/discuss/598276037310521344
2 回复 分享
发布于 03-15 22:22 广东
分享一下改进版本,对包括2*5+2*7形式在内的所有情况都适用 https://www.nowcoder.com/share/jump/1689299283895
1 回复 分享
发布于 2023-07-14 09:48 广东
必须要把4个数全部用完吗?
点赞 回复 分享
发布于 2022-08-10 17:59
这个机试库感觉刷起来很难受,用例就20个,根本不全面。
点赞 回复 分享
发布于 2022-12-07 19:42 广东
for i in range(len(arr)): m=arr[0:i]+arr[i+1:] n=arr[i] 这里m为什么要拆开写,小白求解答,谢谢啦
点赞 回复 分享
发布于 2023-04-18 17:36 香港
if item<1,这个条件不对,四个数都是1-10的数,如果都是10,都是减法操作,item可以等于-20,也是正常的
点赞 回复 分享
发布于 2023-04-19 21:34 广东
item为啥要从24开始,中间没有改变arr里的数据,把运算结果赋值给item,最后居然用arr[0]和item作比较,这能行?没看懂
点赞 回复 分享
发布于 2023-10-11 23:24 广东
哥们你这7 2 2 5过不去
点赞 回复 分享
发布于 2023-12-18 20:26 北京

相关推荐

62 9 评论
分享
牛客网
牛客企业服务