题解 | #24点游戏算法#

24点游戏算法

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

答案里经常出现的help函数算递归解的方法没办法计算两个乘号一个加号的情况 测试可以考虑基础情况(64),无法实现24的情况(1004),一定要有优先级的情况(2 2 10 1),无法递归解的情况(2 2 7 5)

import itertools#注意两个乘法一个加法和需要括号才能凑24点的情况!括号是可以被使用的
while True:
    try:
        nums = list(map(str, input().split()))
        op = ['+', '-', '*', '/']
        flag = False#标志位初始化
        p = list(itertools.permutations(nums))
        #全排列所有数字和符号出现的可能,注意permutations计算列表返回列表,eval计算字符串返回整数
        for q in p:
            for i in op:
                for j in op:
                    for k in op:#区分优先级
                        inter1 = eval(q[0] + i + q[1])
                        inter2 = eval(str(inter1) + j + q[2])
                        inter3 = eval(str(inter2) + k + q[3])
                        if inter3 == 24:
                            flag = True
                        #以下是不能使用括号的情况,没有优先级
                        #if eval(q[0] + i + q[1] + j + q[2] + k + q[3]) == 24:
                         #   flag = True
        if flag:
            print('true')
        else:
            print('false')
    except:
        break
全部评论
优化了一下for下面的语句 “2+2”的结构现在也能判断了 如 2 2 5 7,1 1 5 7 等 inter1 = eval(q[0] + i + q[1]) inter2 = eval(str(inter1) + j + q[2]) inter3 = eval((str(inter2) + k + q[3])) inter4 = eval(q[2] + j + q[3]) inter5 = eval((str(inter1) + k + str(inter4))) if inter3 == 24 or inter5 == 24: flag = True
1 回复 分享
发布于 2022-12-08 03:18 陕西

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
4 2 评论
分享
牛客网
牛客企业服务