题解 | 24点游戏算法

24点游戏算法

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

def fn(nums):
    if len(nums) == 1 and abs(nums[0] - 24) < 10**(-6): #nums中只有一个元素,且值为24,终止递归
        return True
    for i in range(len(nums)):
        for j in range(i+1,len(nums)): #在nums中任意取两个元素a,b,用两个for循环遍历到所有可能
            a = nums[i]
            b = nums[j]
			
            new_list = [v for k,v in enumerate(nums) if k not in {i,j}] #去除a,b后的列表
            
            operations = [a+b,a-b,b-a,a*b] #对a,b两个数做任何运算操作
            if a != 0:
                operations.append(b/a)
            if b != 0:
                operations.append(a/b)
            for result in operations:
                if fn(new_list + [result]):  #递归,对a,b做四则运算操作的值,加到去除a,b后的列表中
                    return True
    return False

while True:
    try:
        nums = list(map(int,input().split()))
        if fn(nums):
            print("true")
        else:
            print("false")

    except:
        break

全部评论

相关推荐

今天 00:55
门头沟学院
区域赛银,邀请赛金,打算十二月打下Java基础、背点八股、写个外卖后去投福建小厂的寒假实习,简历应该怎么写呢?以及福州/和厦门有推荐的小厂吗?
牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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