HJ67 24点游戏算法

def dfs(nums):
    if not nums:
        return False
    if len(nums)==1:
        return abs(nums[0]-24)<1e-6
    for i, a in enumerate(nums):     # 获取第一个数字
        for j, b in enumerate(nums):   # 获取第二个数字
            if i!=j:                      # 控制不重复
                newNums = list()
                for k, c in enumerate(nums):  # 获取剩余数字
                    if k!=i and k!=j:
                        newNums.append(c)
                d = [a+b,a*b,a-b]
                for k in range(4):
                    if k<2 and i>j:  #对于+和*操作来说不需要考虑两者的顺序
                        continue
                    if k<3:
                        newNums.append(d[k])
                    else:
                        if abs(b)<1e-6: # 排除除数为0的情况
                            continue
                        newNums.append(a/b)
                    if dfs(newNums):
                        return True
                    newNums.pop()
    return False

while True:
    try:
        nums = list(map(int,input().split()))
        if dfs(nums):
            print("true")
        else:
            print("false")
    except:
        break
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值