第3-5课:24 点计算器

本文介绍了如何使用穷举法和分治法结合的策略来解决24点游戏的算法问题。算法通过递归方式处理不同规模的子问题,从4个数字开始,逐步缩小问题规模,直到只剩一个数字。每一步中,选取两个数字进行加、减、乘、除运算,得到新的子问题。通过记录数字的“出身”来构建最终的中缀表达式。文章还讨论了数字和运算符的穷举遍历,以及如何处理运算符的优先级问题,但并未涉及具体的去重实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

24 点游戏是一个很有意思的数字游戏,也是一道常见的算法面试题。题目是这样的:任给四个数(为了便于人们心算或口算,一般都是小于 10 的数),对四个数字用各种组合进行加、减、乘、除四则运算,看看结果是否能等于 24?对于面试题来说,这是一个典型的穷举类型算法问题。这个题目比较有意思的地方是它除了要对数字组合进行枚举,还要对四个运算符进行组合。这一课我们要介绍的方法有点特殊,它没有简单地使用穷举遍历,而是采用穷举法和分治法相结合的方法来解决这个问题,这种方法比数字 + 运算符一起枚举的方法简单,容易理解,整个算法只有大约 40 行有效代码,其中主体部分有效代码只有不到 20 行,快来看看是怎么回事儿吧。

问题分析与建模

这个算法问题的难点主要有两个,一个是数字和运算符的穷举遍历,另一个是将四则运算表达式作为结果输出。无论是运算符遍历还是表达式输出,都要考虑运算符的优先级,必要时要加括号。当然,也可以采用后缀表达式的形式,避免在枚举遍历的过程中考虑括号的问题。一般我们书写和计算都采用中缀表达式,中缀表达式的特点是运算符始终位于两个操作数的中间,对于运算符的优先级采用括号的方式解决,比如以下四则运算采用的就是中缀表达式的形式:

7 + ( 3 + 2 ) × 4 − 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王晓华-吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值