题解 | #24点游戏算法#把所有可能算出来

24点游戏算法

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

import itertools


def fun(arr, y):

    # 前面的结果与后一个数加减乘除的可能
    res = []
    for x in arr:
        res.append(x)
        res.append(y)
        res.append(x + y)
        res.append(x - y)
        res.append(x * y)
        res.append(x / y)
    return res


while True:
    
    try:
        num_list = [int(i) for i in input().split()]
        
        # 存放所有加减乘除的可能
        result_list = []
        # 所有数字排列的顺序都考虑进去
        for i in range(len(list(itertools.permutations(num_list)))):
            a, b, c, d = list(itertools.permutations(num_list))[i]
            list1 = fun([a], b)
            list2 = fun(list1, c)
            list3 = fun(list2, d)
            result_list.extend(list3)
        # 只要24在所有的结果中就满足条件
        if 24 in result_list:
            print('true')
        else:
            print('false')
        
    except:
        break
全部评论
纵欲有个肯写注释的大佬了,不容易
1 回复 分享
发布于 2022-03-07 21:14
谢谢老哥,今天面试就用到了从你这儿学的itertools.permutations
1 回复 分享
发布于 2023-02-20 16:48 浙江
你没考虑到括号的情况啊,比如1,2,3,5这四个数,24=(1+2)*(3+5),24不是由其中任何一个数与另外三个数的某种运算结果得到的
点赞 回复 分享
发布于 2023-03-30 19:45 北京
24=(1+2)*(3+5)拆开成:1*3+1*5+2*3+2*5
点赞 回复 分享
发布于 2023-06-12 09:58 广东
得到list3后判断下24 in list,如果为真就可以返回了。
点赞 回复 分享
发布于 2023-07-26 16:12 湖北
排列组合 + 加减乘除 应该包含了所有的顺序了
点赞 回复 分享
发布于 2024-03-31 22:41 广东
计算前一个数和后一个数计算可能性的时候,能不能不用添加操作数x,y呀?
点赞 回复 分享
发布于 2024-04-06 20:22 浙江

相关推荐

评论
15
12
分享

创作者周榜

更多
牛客网
牛客企业服务