递归 | HJ89 24点运算

from itertools import permutations
reflect = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, 
            '9':9, '10':10, 'J':11, 'Q':12, 'K':13, 'A':1}
record = []
def func(group, cur, sig):
    if cur == 3: 
        res = reflect[group[0]]  # 计算结果先把第一个操作数放入
        exp = f'{res}'  # 计算表达式同上
        for j in range(3):  # 判断后三个操作数和计算符号
            new_num = reflect[group[j+1]]
            new_sig = sig[j]
            exp += new_sig + str(new_num)
            res = eval(f'{res}{new_sig}{new_num}')  # eval函数计算字符串的int计算结果
        if res == 24:
            exp = exp.replace('11', 'J')  # 替换11等为J、Q、K、A
            exp = exp.replace('12', 'Q')
            exp = exp.replace('13', 'K')
            exp = exp.replace('1', 'A')
            record.append(exp)
        return
    func(group, cur+1, sig+['+'])  # 遍历递归+-*/
    func(group, cur+1, sig+['-'])
    func(group, cur+1, sig+['*'])
    func(group, cur+1, sig+['/'])    

while True:
    try:
        cards = input().split(' ')
        if 'joker' in cards or 'JOKER' in cards:
            print('ERROR')
        elif len(set(cards)) == 1:
            if '6' in cards:
                print('+'.join(cards))
            elif 'Q' in cards:
                print('Q+Q+Q-Q')
            elif '4' in cards:
                print('4*4+4+4')
            else:
                print('NONE')
        else:
            p = list(permutations(cards, 4))
            for i in p:
                func(i, 0, [])
            if record:
                print(record[0])
            else:
                print('NONE')
    except:
        break

用时:1.5h

#递归#
华为笔试刷题 文章被收录于专栏

高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107

全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
身边的人都在收获,我却还在原地踏步,到底该怎么办啊!每次看到他们的好消息,我都想放弃,心里不停地问自己:到底该怎么才能找到一份工作呢?这种无力感让我想要彻底摆烂,真的很想知道,别人是怎么做到的。有没有人分享一下经历呢?我想学习一下啊走出这样的日子。
鼗:秋招其实是运气>实力的一场竞技游戏,除非实力很强(学历和技术)。大多数人都是半斤八两,看面试官和HR以及简历被曝光的概率罢了,有些时候你可能运气差一点或者说面试官不太友好也或者说你确实准备的不够好之类的,这些都是可能发生的事情。我觉得能做的事情是不比较、不气馁、在面试前多看一点面试的时间冷静一点自信一点,大大方方面试,给自己多一点时间去求职。我这样说不是站着说话不腰疼,我是想说你的offer还在路上,你也值得在这些困难之后得到你较为理想的offer,请你继续加油,保持乐观,积极打败你现在的困难
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务