题解 | #24点# 直接遍历须全排列关键字 优化后舒服了

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import itertools
def compute(s1_list,s2):
    out = []
    for cmp in ['+','-','*','/']:
        for s1 in s1_list:
            out.append('('+s1+cmp+s2+')')


    return out



a,b,c,d = input().split()

#取两个运算
compute_s = []
for x1,x2,x3,x4 in itertools.permutations([a,b,c,d]):
    temp = compute([x1],x2)
    compute_s.extend(compute(compute(temp,x3),x4))
    for res in compute([x3],x4):
        compute_s.extend(compute(temp,res))


flag = "false"
for cs in compute_s:
    try:
        if eval(cs) == 24:
            flag = "true"
            break
			#有除零得排除
    except:
        pass

print(flag)
        





  
  

优化了一下 既然全排列了可以不考虑 小数情况 比如 7/5*10+10 这种会在7*10/5+10 这里遍历到 然后把除零一起提前去掉

import itertools
def compute(n1_list, n2_list):
    out = []
    for i in n1_list:
        for j in n2_list:
            out.extend([i+j, i-j, i*j])
            if j != 0 and i % j == 0:
                out.append(i/j)

    return out


a, b, c, d = map(int, input().split())


compute_s = []
for x1, x2, x3, x4 in itertools.permutations([a, b, c, d]):
    # 取两个运算
    temp1 = compute([x1], [x2])
    # 再一个一个算
    temp2 = compute(temp1, [x3])
    compute_s.extend(compute(temp2, [x4]))

    # 再两个两个算
    temp2 = compute([x3], [x4])
    compute_s.extend(compute(temp1, temp2))


flag = "false"
for res in compute_s:
    if res == 24:
        flag = "true"
        break

print(flag)



全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务