【Python数据结构与算法】递归----算24

举报
是Dream呀 发表于 2024/08/28 22:19:04 2024/08/28
【摘要】 题目:算24描述给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们...

在这里插入图片描述

题目:算24

描述
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。

这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。

比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
输入
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
样例输入

5 5 5 1
1 1 4 2
0 0 0 0

样例输出

YES
NO

AC代码

import math
EPS = 1e-6
def equal( x,y ):
    return math.fabs(x-y) <= EPS
def count24(a): 
	n = len(a)
	if n == 1:
		return equal(24,a[0])
	for i in range(n-1):
		for j in range(i+1,n):
			x,y = a[i],a[j] 
			t = [x+y,x-y,y-x,x*y]
			if not equal(y,0):
				t.append( x / y)
			if not equal(x,0):
				t.append( y / x)
			for v in t:
				b = [v] 
				for k in range(n):
					if k != i and k != j:
						b.append(a[k])
				if count24(b):
					 return True
	return False

while True:
	a = list(map(int,input().split()))
	if a[0] == 0:
		break
	if count24(a):
		print( "YES" )
	else:
		print( "NO" )

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。