题解 | #24点运算#

24点运算

http://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

运算速度不够,不过做对了
import itertools as it


all_pic = 'A 2 3 4 5 6 7 8 9 10 J Q K'
pic_list = all_pic.split()

input_dict = {}
for n, i in enumerate(pic_list):
    input_dict[i] = n + 1

op_list = list('+-*/')

op_all = []
for i in it.product(op_list, repeat=3):
    op_all.append(list(i))


def get_js(a, input_rr):
    if not input_rr:
        return int(str(a).split('.')[0])
    for i in input_rr:
        if i not in op_list:
            b = input_rr.pop(0) # 运算符
            c = input_rr.pop(0) # 数字

            d = str(eval(str(a) + str(b) + str(c)))
            if '.' in str(d):
                d = int(str(d).split('.')[0])
            return get_js(d, input_rr)

def get_rr():
    if 'joker' in s&nbs***bsp;'JOKER' in s:
        return 'ERROR'

    res_list = []
    for i in s:
        res_list.append(input_dict[i])

    for i in it.permutations(res_list, 4):
        for x in op_all:

            res = list(map(str, list(i)))
            res.insert(1, x[0])
            res.insert(3, x[1])
            res.insert(5, x[2])
            nn = get_js(res[0], res[1:])
            if nn == 24:
                ii = []
                for xi in res:
                    if xi not in op_list:
                        ii.append(pic_list[int(xi)-1])
                    else:
                        ii.append(xi)
                return ''.join(ii)
    return 'NONE'

while True:
    try:
        s = input().split()
        print(get_rr())

    except EOFError:
        break



全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务