节选自《数学都知道》丛书第一册
“24点扑克牌游戏”的游戏规则是:任取除大小王之外的4张扑克牌,看能否在其间添加四则运算符号和括号得出24。在这个游戏里,由于限制在4个数和四则运算的范围内,所以利用电脑程序检验运算结果相对简单。有一位叫中大黑熊的博主编写了一个仅有300行的Java程序,就不但提供了源程序,而且可以在GUI上显示。我们来看一个具体的例子(如图1):
图1. 24点扑克牌游戏 /作者
在这个例子中,我们有 (7-(8/8))*4=24。并不是每个组合都能产生24这个结果。比如♥A ♦A ♣A ♠A(即1,1,1,1组合)就不能产生出24。另一方面,有些组合可以产生多种解法。比如,♥2 ♦4 ♣6 ♠Q(即2,4,6,12组合)可以用2 + 4 + 6 + 12 = 24 或 4 × 6 ÷ 2 + 12 = 24 或 12 ÷ 4 × (6 + 2) = 24 等来求解。不管一个组合能否组成24,总共有多少个可能的组合呢?这是一个排列组合问题。我们要求的是有1到13个独立数字的有重复的组合,可以用下式计算:
(注:用组合数学中的隔板法可以得到此公式,参见今天推送的第二篇文章)
即有1820个组合。可以用枚举的方法证明,在这1820个组合中,有458个组合无解。当然这是严格限制使用加减乘除来运算的条件下。有的人允许乘方开方和指数对数等运算,那么有解的情况就更多了。总之,大多数情况都是有解的,拿到牌之后我们不应轻易放弃。
我们给一个稍微有点挑战的题目:♥5 ♦5 ♣5 ♠A。有聪明的商人把能解的数组做成游戏卡出卖,很受欢迎。图1右是我在一个美国初中的数学教室里看到的。
那次去学校是为了观摩他们的数学圈(Math Circle)活动的。讲课的是几个高中生,听课的是一群初中生。老师看我有些无聊,就主动邀请我跟他玩一盘游戏“Blokus”(如图2)。这是一个有关几何对称的四人游戏,能帮助学生熟悉几何思维。
图2. 美国数学老师有很多游戏 /作者
其实,随着我们数学知识的增长,大可不必再限制于4个1到13之中的数字和加减乘除四则运算上。事实上,英雄所见略同,早就有人打破常规,把乘方、开方、对数、取整甚至阶乘运算扩大到了“24点扑克牌游戏”。
现在,我们再扩大一点,允许有任意多个数字,而且等号的位置也可以是任意的。下面我们来举例(如图3)说明:如果已知3个数489、2、978,
图3. Numenko游戏题面 /numenko.com
那么在489和2之间以及2和978之间,我们需要添加哪种运算符号和等号才能使得它成为一个等式呢?这个问题的答案如下图(如图4)所示:
图4. Numenko游戏解答 /numenko.com
上面这种扩展的“24点扑克牌游戏”有一个专门的名字,叫做“Numenko”。
我们再来试想一下,能否也像中大黑熊一样用Java语言写一个自动验证其计算结果的程序呢?不得不说,这个工作要复杂得多,绝不是300行程序所能完成的。那么怎么办呢?不要着急,这时我们可以调用现成的软件包来达到目的。MuParser就是一个理想的现成的软件包。
顺便再介绍一个类似于Numenko的趣味数学游戏:“Hexa Trex”(如图5左)。你的目标就是用上每一个符号并使等式成立。这个例子的解答为21+3=8×3(如图5右)。
图5. Hexa Trex游戏 /作者
如果读者不甘心用现成的软件包,有兴趣尝试自己来写程序验证计算结果的话,那么我们建议大家最好用Python语言,因为Python不但免费,而且支持数学表达式的读取。而Matlab和Mathemaitica等商业软件虽也有相同的功能,但不是免费的。
在下面的蜂窝状图形里(如图6),你可以有3种移动方法:从一个蜂房到右边紧挨的蜂房,到右上角紧挨的蜂房,或到一个右下方相邻的蜂房。请问从A到B有多少条路径?
(欢迎大家在留言区提交解答!)
图6. 蜂窝状图形 /作者
限时特惠:本站每日持续更新5-20节内部创业项目课程,一年会员
只需199元,全站资源免费下载点击查看详情
站长微信:
jjs406