题解 | #24点运算#

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

我就是那种纯纯的怨种,用的最傻最笨的方法呜呜呜呜!!!!!
没看大佬的代码前还不知道eval结合括号的妙用,我就傻乎乎的先算前两位,再算第三位,再算第四位;
想排列组合想了好久,去搜了一下之后,学到了一个排列组合的函数:itertools库中的permutations函数;
不过里面的每种组合是元组格式,所以我又转换成列表了,不过好像影响不大;
import itertools

cardvalue=[1,2,3,4,5,6,7,8,9,10,11,12,13]  #用来存储牌的计算值
card=['A','2','3','4','5','6','7','8','9','10','J','Q','K']   #用来存储牌面
caway=['+','-','*','/']   #存储运算符

def jok(li):             #判断是否包含大小王
    if 'joker' in li or 'JOKER' in li:
        return 'ERROR'
    else:       #不包含
        tmp=[]
        for i in li:
            tmp.append(cardvalue[card.index(i)])
        a=itertools.permutations(tmp)   # 存储所有排列组合
        tmp1=[list(i) for i in a]    #将每种可能列表化
        return ca(tmp1)

def ca(tmp):      #计算是否能达到24
    
    for li in tmp:
        #每个li都是一种组合
            #前两位数计算:
        tmp1=[] 
        for j in caway:
            if j == '+':
                val1=li[0]+li[1]
            elif j== '-':
                val1=li[0]-li[1]
            elif j=='*':
                val1=li[0]*li[1]
            else:
                val1=int(li[0]/li[1])
            tmp1.append(val1)

        #前两位的计算值与第三位   
        tmp2=[]
        for i in range(len(tmp1)):
            for j in caway:
                if j == '+':
                    val2=tmp1[i]+li[2]
                elif j== '-':
                    val2=tmp1[i]-li[2]
                elif j=='*':
                    val2=tmp1[i]*li[2]
                else:
                    val2=int(tmp1[i]/li[2])
                tmp2.append(val2)

        #前三位的计算值与第四位
        tmp3=[]
        for i in range(len(tmp2)):
            for j in caway:
                if j == '+':
                    val3=tmp2[i]+li[3]
                elif j== '-':
                    val3=tmp2[i]-li[3]
                elif j=='*':
                    val3=tmp2[i]*li[3]
                else:
                    val3=int(tmp2[i]/li[3])
                tmp3.append(val3)
                
        tmp4=[]   #存储达到24时的运算符     
        for x,y in enumerate(tmp3):
            if y ==24: 
                inde2=int(x/4)
                inde22=x%4    #最后一个运算符索引
                inde1=int(inde2/4)
                inde11=inde2%4   #倒数第二个运算符索引
                inde00=inde1%4   #第一个运算符索引                      
                tmp4.extend([caway[inde00],caway[inde11],caway[inde22]])   #将运算符存储到一个列表中
                result=card[li[0]-1]+tmp4[0]+card[li[1]-1]+tmp4[1]+card[li[2]-1]+tmp4[2]+card[li[3]-1]
                return  result 
    return 'NONE'
while True:
    try:
        n=input().split()
        print(jok(n))
    except:
        break
    


全部评论

相关推荐

投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务