常见编程问题之速算24点两种解法

本文详细介绍了“巧算24点”游戏的两种算法实现思路:暴力排列法和递归加剪枝法。通过分析游戏规则,对比两种算法的时间复杂度,深入探讨了如何运用编程解决这一经典数学游戏问题。

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

之前面试某大厂的时候碰到让写速算24点的程序,当时使用了保利排序,感觉写的不是很好,这里再总结一下。

一.速算24点游戏描述:

“巧算24点”是一种数学游戏,游戏方式简单易学,能健脑益智,是一项极为有益的活动.“巧算24点”的游戏内容如下:一副牌中抽去大小王剩下52张,(如果初练也可只用1~10这40张牌)任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24.每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9—8)×8×3或3×8+(9—8)或(9—8÷8)×3等.

二.思路分析

一般有两种方法,

第一种暴力排列法:

先得到这4张牌的排序,时间复杂度为4!,然后对数字之间的3个空,分别插入4中运算符,这个时间复杂度为4^3,总共的时间复杂度为O(4!*4^3)

第二种方式递归加剪枝:

原来的问题表示为O(24,[a,b,c,d]),那么原来的问题可以分解为O(24-a,[b,c,d]);O(24+a,[b,c,d]);O(24/a,[b,c,d]);O(24*a,[b,c,d])...等对每个数字操作的16个子问题,O(sum,[a,b,c,d])表示找到a,b,c,d之间各种可能的运算组合,使得最终的结果为sum。如果子问题中的sum小于0或者不为整数,那么就停止搜索。这个思想可以使用纯递归加对结果去重,或者使用树。复杂度跟第一种方法是一样的。

思路已知,代码实现起来比较简单,我自己就没有再写。

别人的实现如下:

树模型:

https://zhidao.baidu.com/question/243276790.html

枚举法:

https://blog.csdn.net/wangqiulin123456/article/details/8145545

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

skj1995

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

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

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

打赏作者

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

抵扣说明:

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

余额充值