题解 | #24点游戏算法#

24点游戏算法

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

la = ['+', '-', '*', '/']
lb = input().split()
# lb = ['1', '1', '5', '7']

ra = []     # 获取所有运算符的排列
for i in la:
    for j in la:
        for k in la:
            ra.append([i, j, k])

rb = []     # 获取所有数字的排列
for a in range(4):
    for b in range(4):
        if b == a:
            continue
        for c in range(4):
            if c == b or c == a:
                continue
            for d in range(4):
                if d == a or d == b or d == c:
                    continue
                l = [lb[a], lb[b], lb[c], lb[d]]
                if l not in rb:     # 去除存在相同数字产生的重复列
                    rb.append(l)


# for _ in ra:
#     print(_)
# print('='*50)
# for _ in rb:
#     print(_)


def judge(ra, rb):
    for i in rb:
        for j in ra:
            # 对括号运算进行处理
            rs0 = "{}{}{}{}{}{}{}".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs1 = "({}{}{}{}{}){}{}".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs2 = "{}{}({}{}{}{}{})".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs3 = "({}{}{}){}{}{}{}".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs4 = "{}{}({}{}{}){}{}".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs5 = "{}{}{}{}({}{}{})".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs6 = "({}{}{}){}({}{}{})".format(i[0], j[0], i[1], j[1], i[2], j[2], i[3])
            rs = [rs0, rs1, rs2, rs3, rs4, rs5, rs6]
            for r in rs:
                try:
                    if eval(r) == 24.0:
                        return True
                except ZeroDivisionError as e:
                    continue
    return False


if judge(ra, rb):
    print('true')
else:
    print('false')

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务