递归 | HJ67 24点游戏算法

# 最优解
import sys
def func(nums, tar):
    if len(nums) == 1: return nums[0] == tar
    # 注意各种计算顺序都要考虑
    for i in range(len(nums)):
        nums = nums[1:] + [nums[0]]
        if func(nums[1:], tar+nums[0]) or func(nums[1:], tar-nums[0]) \
            or func(nums[1:], tar*nums[0]) or func(nums[1:], tar/nums[0]):
            return True
    return False
     
for line in sys.stdin:
    nums = list(map(int, line.strip().split()))
    print(str(func(nums, 24)).lower())


# 我的代码
def func(left, nums, oprs):
    if not left:
        n1, n2, n3, n4 = nums[0], nums[1], nums[2], nums[3]
        opr1, opr2, opr3 = oprs[0], oprs[1], oprs[2]
        exp1 = eval(f'{n1}{opr1}{n2}')
        exp2 = eval(f'{exp1}{opr2}{n3}')
        exp3 = f'{exp2}{opr3}{n4}'
        if eval(exp3) == 24:
            res.append(exp3)
        return
    for i in range(len(left)):
        func(left[:i]+left[i+1:], nums+[left[i]], oprs+['+'])
        func(left[:i]+left[i+1:], nums+[left[i]], oprs+['-'])
        func(left[:i]+left[i+1:], nums+[left[i]], oprs+['*'])
        func(left[:i]+left[i+1:], nums+[left[i]], oprs+['/'])

while True:
    try:
        n = list(map(int, input().split()))
        res = []
        func(n, [], [])
        if res:
            print('true')
        else:
            print('false')
    except:
        break

用时:40min

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

高质量题: 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

全部评论

相关推荐

这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
舂锋:不能投什么岗都用一份简历,一般都是要看企业的岗位需求来写职业技能或者是项目经历,跟岗位相关的就写多一点。
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:35
虽然不怎么光彩,经过这件事,可能我真的要去认同“面试八股文早该淘汰!不会用AI作弊的程序员=新时代文盲!”这句话了
HellowordX:Ai的出现是解放劳动力的,不是用来破坏公平竞争环境的,这样下去,轻则取消所有线上面试,严重了会影响整个行业对所有人产生影响,企业会拉高入职考核各种离谱考核会层出不穷
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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