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

    科技2025-11-03  15

    ** **自己的想法,有点原始,望大神勿喷 **

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

    牛客链接 **

    1、暴搜法

    import itertools def generate_n(num): result = [] for each in set(itertools.permutations(num)): result.append(each) return result def operator_arr(s): ls = [] for i in s: for j in s: for k in s: ls.append([i, j, k]) return ls def Is_24(number, symbol): flag = False for x1 in symbol: for x2 in number: if eval(x2[0] + x1[0] + x2[1] + x1[1] + x2[2] + x1[2] + x2[3]) == 24: print('True:', x2[0] + x1[0] + x2[1] + x1[1] + x2[2] + x1[2] + x2[3]) flag = True return flag elif eval( '(' + x2[0] + x1[0] + x2[1] + ')' + x1[1] + x2[2] + x1[2] + x2[3] ) == 24: print('True:','(' + x2[0] + x1[0] + x2[1] + ')' + x1[1] + x2[2] + x1[2] + x2[3]) flag = True return flag elif eval( x2[0] + x1[0] + '(' + x2[1] + x1[1] + x2[2] + ')' + x1[2] + x2[3] ) == 24: print('True:', x2[0] + x1[0] + '(' + x2[1] + x1[1] + x2[2] + ')' + x1[2] + x2[3] ) flag = True return flag else: pass # print('... 其他的 自己添加 懒。。。 哈哈哈 ') return flag # https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb?tpId=37&&tqId=21290&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking if __name__ == '__main__': n = input().split() s = ['+', '-', '*', '/'] number = generate_n(n) symbol = operator_arr(s) print( Is_24(number, symbol) )

    2、递归 牛客网已提交代码]中找到了这个。(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
    Processed: 0.025, SQL: 9