HJ67 24点游戏算法

描述
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
输出:

true or false

本题含有多组样例输入。
输入描述:
输入4个int整数

输出描述:
返回能否得到24点,能输出true,不能输出false

#dfs深度优先搜索
#递归到最底层,再从相邻节点就递归到最底层

def jisuan(arr,i):
    if i < 0 : #i<0说明四张牌合起来比24点大
        return False
    elif len(arr) == 1: #剩一个数时,若相等即可拼成24点
        return arr[0] == i
    else:
        for j in range(len(arr)):
            a = arr[:j] + arr[j+1:] #取出一个数,其他三个数继续做计算
            temp = arr[j]
            if jisuan(a, i-temp) or jisuan(a, i+temp) or jisuan(a, i*temp) or jisuan(a, i/temp): #一个递归完再递归第二个
                return True #有其中一个递归返回true就是找到答案
        return False
    
while True:
    try:
        l = list(map(int,input().split()))
        if jisuan(l, 24):
            print('true')
        else:
            print('false')
    except:
        break

你可能感兴趣的:(HJ67 24点游戏算法)