描述
问题描述:给出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
网友评论