牛客网 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 暴搜法

问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]
输出:
true or false

自己写的时候用暴力搜索,穷举了所有的运算。
将所有的运算符穷举 64种
将四个数字进行组合 24种

#在这里插入代码片
def A_arr(s):
    ls=[]
    for i in s:
        for j in s:
            for k in s:
                ls.append([i,j,k])
    return ls
def C_arr(ls):
    s=[]
    for i in ls:
        a=ls.index(i)
        ls1=ls[:a]+ls[a+1:]
        for j in ls1:
            a=ls1.index(j)
            ls2=ls1[:a]+ls1[a+1:]
            for k in ls2:
                a=ls2.index(k)
                ls3=ls2[:a]+ls2[a+1:]
                for p in ls3:
                    s.append([i,j,k,p])
    return s
 
while True:
    try:
        ls=input().strip().split()
        get=0

        s="+-*/"
        ss=A_arr(s) #运算符排列列表
        sss=C_arr(ls)  #四个数组合列表 24个
        for i in range (len(sss)):
            for j in range(len(ss)):
                exp1=sss[i][0]+ss[j][0]+sss[i][1]
                exp2=str(eval(exp1))+ss[j][1]+sss[i][2]
                exp3=str(eval(exp2))+ss[j][2]+sss[i][3]
                res=eval(exp3)
                #print(res)
                if res==24:
                    get=1
                    print("true")
                    break
            if get:break
        if not get:print("false")
    except:
        break

最后[在牛客网已提交代码]中找到了这个。(https://www.nowcoder.com/profile/59561197/codeBookDetail?submissionId=32414864)
使用递归法编程。
最后奉上牛客网上这段代码以示敬意。

在这里插入代码片
def f(res,n):
    x = False
    if len(n) == 1:
        if n[0] ==res:
            return True
        else:
            return False
    for i in range(len(n)):
        a = n[i]
        b = n[:]
        b.remove(a)
        x = x or f(res-a,b) or f(res*a,b) or f(res/a,b) or f(res+a,b)
    return x
while True:
    try:
        n = input().split()
        flag = False
        if len(n) != 4:
            print('false')
            break
        for i in range(4):
            n[i] = float(n[i])
        if f(24.0, n):
            print('true')
        else:
            print('false')
    except:
        break

https://www.nowcoder.com/profile/59561197/codeBookDetail?submissionId=32414864

你可能感兴趣的:(python,coding,python)