首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

24点小游戏

我第一次玩24点是初中的时候,那时候和堂弟表哥在堂妹家玩,堂妹提出玩24点游戏,堂妹比我们小三岁,可能正在上小学吧。

拿出一副扑克牌去掉大小怪和花牌,从剩下的牌里随便找出四张,谁能先用加减乘除算出24就算赢,如果大家都同意放弃或者有人计算出来就重新开始一局。结果是我们三个哥哥都输多赢少,堂妹显然是经过了准备的。

事后我想了很久,我发现只要脑袋中预存几个简单的式子,比如3乘以8、4乘以6、2乘以12,然后用四个数字尽量往这些式子上套用就可以比较快速的算出一半的题目。其他的就可以拼临场发挥了。我当时还想到,我们四个人都放弃的局其实并不一定是没有答案,只是我们都无法解出,那是否有方法可以说明这些题目一定没有答案呢?比如当时就有一个 5 5 5 1 的题目其实是有解答的,但是常人如果不经提示很难算出答案。

直到我参加工作并学习了编程后才解决这个困扰我很久的问题,我用代码穷举出了所有解法,前几天我翻到这段代码又将它优化了一下,并把问题扩充到100以内的24点的所有可解题目,我觉得这是个挺有意思的事情,想把他记录下来。

10以内的24点游戏共有566组可解答的题目,也就是最开始我玩的游戏,数字比我想象的要少很多。如果用扑克牌玩,还可以算上J(11) Q(12) K(13)那么共有1362组可解答的题目。如果继续往上扩充,每增加一个数字大概增加几百到一千组可解答的题目,直到100以内的数字可以有5706组可解答的题目。

进一步思考如下:穷举这些可解题目时我也穷举了题目对应的所有解法,那么如果解法很多,那么这个题目应该是比较容易的,比如13以内的最多解法的题目为 2 4 8 10,其次是2 3 6 12。如果希望找出很难的题目却并不能按照解法最少来寻找,比如 1 1 1 8 只有一种解法,但是很容易看出来。

可以按照5 5 5 1的解答思路拓展一下,这个题目解法为 (5 - 1/5) * 5 = 4.8 * 5 = 24,解答使用到了小数,而且必须要使用小数,这个就给题目增加了难度,按照此思路我在最大数字在13以内找出以下题目:

1 3 4 6

1 4 5 6

1 5 5 5

1 6 6 8

1 8 12 12

2 2 11 11

2 2 13 13

2 3 5 12

2 4 10 10

2 5 5 10

2 7 7 10

3 3 7 7

3 3 8 8

4 4 7 7

5 5 7 11

5 7 7 11

大家可以尝试一下。

另外还有一些也比较困难,他们解法较少,且并不能简单套用我脑袋里预存的式子:

3 7 9 13

1 7 13 13

6 12 12 13

1 6 11 13

6 11 12 12

5 10 10 13

1 5 11 11

5 10 10 11

4 8 8 13

4 4 10 10

4 8 8 11

6 9 9 10

3 8 8 10

3 5 7 13

3 6 6 11

1 2 7 7

5 8 9 13

5 9 10 11

4 7 11 13

4 9 11 11

4 10 10 11

6 7 7 11

3 5 8 13

5 5 8 11

2 3 13 13

大家也可以试试,权当娱乐一下。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180223G0NVTR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券