15数字华容道解法 图解

您所在的位置:网站首页 华容道玩法说明 15数字华容道解法 图解

15数字华容道解法 图解

2024-05-28 10:29| 来源: 网络整理| 查看: 265

有了Python语言,我们可以对算24游戏相关内容做一个比较彻底的分析。为什么必须python语言,其它语言不行么?当然也可以,只是python让很多算法可以比较简单地实现,让研究过程更有乐趣。

5182fb7c7066e9f0c182ecf4750d789a.png

6/3,2*7,14+10

算24全分析

o 问题1:扑克牌玩法的算24游戏有多少种不同的组合

o 问题2:其中有多少种组合是有解的

o 问题3:扩展问题——算23,算25,等等

o 问题4:计算能力最强的牌组

o 问题5:给出计算过程

o 问题6:不同牌组的计算难度

问题1:扑克牌玩法的算24游戏有多少种不同的组合

问题转化为一个组合问题:从1~13,抽取4个数字的组合,抽取可以重复。转化为苹果和盘子的语境就是:从13种不同的苹果中任意抽取,放在4个相同的盘子里,盘子不允许为空。

结果显示:1820应该说,这是一个相当小的数字,

问题2:其中有多少种组合是有解的

这就稍微复杂一点,必须做求解的判断。我们采用最朴素的算法,也正是大多数算24游戏所采用的操作方法:从现有牌组中任选两个数字,进行所有可能的计算,将结果放回剩下的数字中。继续这种操作,直到最后只剩下一个数字。检查它是否等于24,在所有递归操作中,有一种情况成立即说明有解。这里将涉及4个小算法:三个个辅助算法(任性两个数字、所有可能的计算、剩下的数字),和最后可解性判断的算法。

得到结果,1362种是可解的,大约占到3/4。

问题3:扩展问题——算23,算25,等等

如果你经常亲自玩这个算24的游戏,有时会遇到我们能算23,也能算25,就是一时想不出怎么算24。我们直观的感觉,算23和25机会都应当少得多,以前日本也有类似算10的游戏,似乎也有因子太少的问题,不如算24的机会多。其他数字怎样?比如36,48,甚至60,虽然因子也很多,但数字太大可能会失去一些较小数字的机会。我们猜想之所以只有算24流行,是因为在所有目标数字中,4张牌组能够算出24的机会最多。是否真的如此呢?让我们编程验证一下,把上面的算法略改一下就可以看看计算其他数字的可解比例。结果可能会让你大吃一惊:

虽然24的计算可解比例是一个局部高点,而且高于所有以后的数字,但不如20以及所有18以前的数字。你相信么?给你4张牌,你有更大的概率算出17而不是24。算出25的机会,其实略小于算23的机会!

总的规律是:数字越小的可计算比例越高,因子越多的可计算比例最高。所有100以内的目标数字中,可计算比例最低的是最大的质数97,仅20%左右。可计算比例最高的,是最小的质数2,在全部1820种牌组中,仅62种组合不能算出2,可计算率高达96%+。像36、48、60、72这种因子较多的数字,都形成了局部高点,但总的来说,数字越大可计算的比例越小。为什么只有算24的游戏最流行呢?只怕或许没什么特别的原因。

整个计算过程超过10分钟。

问题4:计算能力最强的牌组

我们换一个角度来看分析,有些牌组计算能力就比较强,可以算23、24、25等等很多数字;而另外一些计算能力就弱一些。比如四个1,它的计算能力就很弱,能够计算的数字仅0,1,2,3,4,更多的就没法算了。我们想看看不同牌组的计算力如何。仍然以0~100的目标数字为限,超过100的数字不在统计。当然非整数也不统计在内。

大约10分钟后得到计算结果,限于篇幅,就不一一展示每个牌组的计算能力了。最后得到计算力最强的牌组为:[2, 3, 7, 12]。100以内可计算的整数共有82种,其中30以下所有的数字都能计算,而且算法还不复杂,有兴趣的朋友可以自己试试,稍后公布答案。

问题5:给出计算过程

前面只是做了能否计算的判断,下一个需求是给出计算过程。我们用一个简单的办法来表示计算过程,即三个公式。比如用[2, 3, 7, 12]计算24的方法,简单表示为:‘7+12,3+19,2+22,’。

为了得到计算过程,在问题2的基础上,有两个算法的代码略做修改。

举例,下面显示最强牌组[2,3,7,12]计算0~30目标数字的解法:

0 12-7,5-3,2-2, 1 12-7,5-3,2/2,2 7-3,12/2,6.0-4,3 7*3,12*2,24-21,4 12-7,3+5,8/2,5 12-7,3-2,5/1,6 12-7,3+5,8-2,7 7+12,19+2,21/3,8 7+12,19-3,16/2,9 12-7,5-2,3*3,10 12-7,3+5,2+8,11 7+12,3+19,22/2,12 3*2,7-6,12/1,13 7+12,3*2,19-6,14 7+12,19-3,16-2,15 7*3,12/2,21-6.0,16 12-7,3+5,2*8,17 12-7,3*5,2+15,18 7+12,19-3,2+16,19 7+12,3-2,19/1,20 7+12,3+19,22-2,21 12-7,5+2,3*7,22 12*3,7*2,36-14,23 12+3,15*2,30-7,24 7+12,3+19,2+22,25 7+12,3*2,19+6,26 7*12,84/3,28.0-2,27 7*3,12/2,21+6.0,28 7-3,12*2,4+24,29 12+3,7*2,15+14,30 7*12,84/3,2+28.0,

上面的计算过程,仅仅是给出一个计算方案,没有考虑计算方案的复杂程度(虽然这几个看起来都比较简单)。这就引出了下一个问题——

问题6:不同牌组的计算难度

这是算24最有趣的一部分,有些牌组很容易得到计算方案,有些牌组却百思不得其解,很可能被误认为无解。最有名的一些难度牌组如:[1,5,5,5],[3,3,7,7]等。为了实现这种分析,必须拿到所有的解法。对于一套牌组来说,它的解题难度是由最简单的那个解法决定的。我们对所有的解法,逐一打分,返回分数最低的,作为整个牌组的难度分。难度判断算法判定牌组的难度是比较主观的,在计算机看来,不同的解法之间并没有什么难度的差别可言。只是对于有着某种计算习惯的人类来说,才会有难度差异感觉。我们采用这样计算方法来进行难度评价的标准:

· 解法的最后一步如果是通过整数乘法计算得到24,难度认定为1

· 但如果在最后一步的乘法,参与了小数,一般人是难以想到的,难度定为5

· 最后一步是加法的难度是2

· 最后一步是减法(排除减0这种情况),难度为3

· 最后一步是除法(除除1这种情况),那就可以说是很难了,难度为4

这个难度判断逻辑未必严谨,但实际得到的分析结果,大致符合实际计算观感。 算法同时返回最简单的计算方法。

从结果看,无解的458组,这个早已有结论;难度为1的 956组难度为2的 290组难度为3的 86组难度为4的 20组难度达到5的,仅10组系统认为难度达到4级或5级的,一共只有30组。这里将他们列举出来,有兴趣和自信的朋友可以尝试手工求解。不过,当你知道它们的难度是4级5级,其实是一个巨大的提示,反而容易想出来。所以,如果你把这些题目出给你的朋友们,大概是最有趣的。

牌组[1, 2, 7, 7],难度4牌组[1, 3, 4, 6],难度4牌组[1, 4, 5, 6],难度4牌组[1, 5, 5, 5],难度5牌组[1, 5, 11, 11],难度4牌组[1, 6, 6, 8],难度4牌组[1, 6, 11, 13],难度4牌组[1, 7, 13, 13],难度4牌组[1, 8, 12, 12],难度4牌组[2, 2, 11, 11],难度5牌组[2, 2, 13, 13],难度5牌组[2, 3, 5, 12],难度4牌组[2, 4, 10, 10],难度5牌组[2, 5, 5, 10],难度5牌组[2, 7, 7, 10],难度5牌组[3, 3, 7, 7],难度5牌组[3, 3, 8, 8],难度4牌组[3, 5, 7, 13],难度4牌组[3, 6, 6, 11],难度4牌组[3, 8, 8, 10],难度4牌组[4, 4, 7, 7],难度5牌组[4, 4, 10, 10],难度4牌组[4, 8, 8, 11],难度4牌组[4, 8, 8, 13],难度4牌组[5, 5, 7, 11],难度5牌组[5, 7, 7, 11],难度5牌组[5, 10, 10, 11],难度4牌组[5, 10, 10, 13],难度4牌组[6, 11, 12, 12],难度4牌组[6, 12, 12, 13],难度4


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3