用VBS编了个算24的小程序,为什么结果不对呢?比如1243或7643这两组数字,错在哪?

用VBS编了个算24的小程序,为什么结果不对呢?比如1243或7643这两组数字,错在哪?,第1张

帮你在VB调试了下你的VBS,发现了很有趣的现象

输入1 2 4 3的时候结果会返回两个,其中一个是错误的"1+2-4*3"

因为我调试的时候,想跟踪流程,所以就懒得每次都打1 2 4 3,直接就把inputbox那几条换成

        a = 1

        b = 2

        c = 4

        d = 3

然后发现那个错误答案没了,我很是十分惊讶啊,这是什么情况

再进一步调试发现,这个错误真的非常有趣,涉及到你代码的两个设计缺陷

首先那个错误答案是这么被错误计算的:

1 inputbox返回的是字符串,而字符串是可以通过符号 " + " 连接起来的

所以1+2=12

2 字符串是不可以用 " - "的,所以字符串才会被当成数字进行计算,12-4=8

3    最后是8*3=24

发现两个问题没有,第一是你没有定义变量的类型,执行"+"时被当成字符串

第二是你没有进行运算符优先级判断

剩下问题交给你自己去解决了.

为什么算数纸牌游戏是计算24点而不是别的数?这其实是一个有意思的问题。

最简单的答复:因为24约数多啊!稍微认真点的回答:因为24有8个正约数,1、2、3、4、6、8、12、24,是一个超级合数,容易通过乘法来得到它,而且24本身也不太大,用4张扑克牌(点数1~10或1~13(J、Q、K分别代表11、12、13)),也比较容易通过加法来得到24,总之,通过四则运算算得24的方案数较多,所以随意抽取4张牌,有解的可能性较大,游戏也比较容易顺畅地进行。然而,这样的回答能令人满意吗?我认为不能。“可能性较大”是什么意思?有多大?和别的数比呢?——Talk is cheap, show me your data.要算概率,首先计算4张牌可能出现的组合:如果4个数的范围都是1~10,那么去除重复的情况,不同的组合数为C{10+4-1}^{4}=\frac{13!}{4!\times 9!}=715种。如果4个数的范围都是1~13,那么去除重复的情况,不同的组合数为C{13+4-1}^{4}=\frac{16!}{4!\times 12!}=1820种。当然,由于扑克牌张数的特殊性,每种情况出现的概率实际上并不相等,甚至相差很大(比如实际上出现[3,4,5,6]的可能性是[6,6,6,6]的可能性的4^{4}=256倍),不过为了简化问题,只考虑哪些情况是有解的,并用有解的组合数/总组合数来计算有解的概率。正巧我最近刚开始自学Java,于是顺手编了一个算24的小程序,来计算所有数字组合的24点,写好代码,剩下的就交给计算机了!

嗯,结果出来了:

对于4个数均为1~10的715种情况,有566种有解,概率为79.16%;对于4个数均为1~13的1820种情况,有1362种有解,概率为74.83%。也就是说,如果我们只用数字牌,大约4/5的情况是能算出24点的,如果加上人头牌,这个概率大约是3/4。因此,玩24点游戏,总体来说还是比较顺畅的。当然,问题还远没有结束。对别的数,这个概率是多少呢?于是改一下程序,看看同样的组合,计算1~100的正整数,能算的概率是多少。

结果:1)四张扑克牌均为1~10时,结果如下图所示:横坐标为要计算的数,左边的纵坐标为有解的组合数,而右边纵坐标代表的是有解的概率。

是不是很出人意料!有最多解的计算值并不是24点!而是——2点。4个1~10的数计算2,有解的组合数为709组,有解概率高达99.16%24呢?正如红圈所示,虽然有解率很高(明显高于23和25),但也并不是鹤立鸡群!你看,18和20有解的概率就比它高!2)四张扑克牌均为1~13时,结果如下图所示。

有解概率上,依然是2遥遥领先!因此,我的回答是:我们算24点,其实并不仅仅因为24点的有解概率大(虽然24的有解概率确实也不小,所有大于24的数有解概率都比24点小),如果只是为了有解概率大,那么我们应该计算2、3、1、4等小自然数。我们之所以会去算24,乃是因为它在有解概率较大的情况下,比那些小自然数有了更多的变化性(比如38,46,18+6,14+10……),因此计算起来更具有技巧些,因此对思维的训练也更有帮助。其实呢,24点,如果算厌倦了,也可以算算20点、36点等等,它们的有解概率也是很大的哟!另外,对于计算高手而言,算24点似乎简单了些,因为总共就715种或1820种变化,难题也就诸如[1,5,5,5]、[1,3,4,6]、[1,4,5,6]、[2,7,7,10]、[3,3,7,7]、[3,3,8,8]、[4,4,7,7]等寥寥几个,很容易就会厌倦的。

粤康码24小时从检测时间起开始算

打开“粤省事”小程序,点击进入“粤康码”版块,在健康码左下方会显示个人核酸检测记录;

如为24小时内有效核酸检测结果,则背景显示为紫色,标注有“核酸检测24小时阴性”字样,点击可查看核酸采样时间、检测时间详细信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10991826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存