分享
 
 
 

用Excel解决经典“鸡兔问题”的五种方法

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

“鸡兔问题”是一道古典数学问题,源自我国古代四、五世纪的数学著作《孙子算经》。算经卷下第三十一题为:“今有雉、兔同笼,上有三十五头,下有九十四足。问雉、兔各几何?”原著的解法为:“上署头,下置足。半其足,以头除足,以足除头,即得。”具体解法即:分别列出总头数(35)和总足数(94),总足数除以二,再减去总头数(94÷2-35),得到兔数为12,总头数减去兔数35-12得到鸡数为23。

鸡兔问题本身并不难,使用2元1次方程组的消元算法,可以很快得到答案。我们可以尝试着利用Excel提供的各种计算工具来进行计算,不仅别有趣味,而且还会加深对Excel功能的综合掌握,对于讲授Excel的教师而言,则是典型的一题多解的素材。

一、 利用IF函数试探求解

如图1,创建一个二维表,假设鸡数B2为要求解的单元格,将鸡兔的总头数和脚数分别写入D2和D3单元格,利用已知条件在其他单元格中写入公式:因兔头数=总头数-鸡头数,故在C2单元格中写入=D2-B2;鸡脚数=鸡头数*2,故B3单元格写入=B2*2;兔脚数=兔头数*4,故C3单元格写入=C2*4。

接下来我们在任意其他单元格输入一个判断公式(本例中使用F1单元格),公式内容为=IF(D3=B3+C3,"正解!",IF(D3>B3+C3,"高了","低了"))。公式的本质是判断鸡脚数+兔脚数与总脚数之间的关系,如果判断表达式D3=B3+C3结果为True,就意味着我们已经得到了正确答案。

最后在B2中输入35以内的任意整数进行试探求解。如果输入的数值高于正解,判断单元格F1会提示“高了”,若数值小于正解则提示“低了”,用户根据提示再继续输入其他一个数字,直到输入了正确答案23,F1单元格会显示“正解!”。

这种方法比较直观,但是非常笨拙,需要人工干预。即使用户聪明地使用二分法试探,也需要多次输入才能解决问题,对于更庞大的问题,这种解法几乎是不可行的。

图1 利用IF函数试验求解

二、使用模拟运算表,让Excel自动给出答案

第一种方法存在的问题就是非常繁琐,需要用户干预。为了避免用户干预,可以考虑将鸡兔问题转化为双变量模拟运算表,将鸡数和兔数设置为两个变量。具体做法是:

1. 先在A1:D2单元格中输入参考数据如下(图 2):

图2 参考数据

2. 创建一个二维模拟运算表的框架,因为鸡的数目不会超过脚数/2,即鸡最多为47只,同理兔子数目不会超过94/4,即兔最多为24只。我们用第4行表示兔的数目,用第C列表示鸡的数目。在D4:AA4中填充1,2,3…24等数值,在C5:C47中填充1,2,3…47,参见图 4;

3. 在模拟运算表的左上方C4单元格中输入模拟运算表的公式:=IF(2*A2+4*B2=$C$2,IF(A2+B2=$D$2,"正解","X"),"X"),公式中的$C$2和$D$2单元格为已知的总脚数和总头数,A2和B2将作为模拟运算表的两个变量;

4. 选中模拟运算表区域,即C4:AA47区域,然后选择“数据”菜单中的“模拟运算表”菜单项,打开模拟运算表对话框(如图 3)。在对话框中,输入引用行的单元格为$A$2(即鸡数),输入引用列的单元格为$B$2(即兔数),单击“确定”按钮;

图 3 输入引用行和引用列的单元格

5. 在模拟运算表中会显示出计算结果,在所有的运算表区域中,只有Z16单元格中显示了“正确”两字,其余单元格均为“X”,表示Z16单元格为问题的正解,查表可知,Z16单元格的兔数为12,鸡数为23(如图 4)。

图 4 模拟运算表运算结果

这种使用模拟运算表的方法比较“另类”。利用这种思路,不仅可以求解多元一次方程组,还可以求解多解问题。

三、使用规划求解,将苦活抛给Excel

利用Excel的规划求解功能,我们可以利用计算机高速计算的特性求解鸡兔问题。如果用户的“工具”菜单中没有“规划求解”菜单项,可以选择“工具”à“加载宏”,在“加载宏”对话框中选中“规划求解”并按下“确定”(如图 5),此后在“工具”菜单就可以看到“规划求解”功能了。

图 5 规划求解加载宏

新建一个工作表,单元格B1为总脚数,输入公式=2*B3+4*B4;B2为总头数,输入公式=2*B3+4*B4,B3和B4单元格用于显示计算鸡数和兔数的结果,暂时留空。为求直观友好,可分别在A1、A2、A3、A4单元格中输入文字提示:“总脚数”、“总头数”、“鸡数”和“兔数”。如图 6所示。

图 6 规划求解表

然后选择“工具”菜单下的“规划求解”,在“规划求解参数”对话框中,设置目标单元格$B$1等于固定值94(即总脚数等于94),将可变单元格设置为$B$3:$B$4,即欲求解的鸡数B3和兔数B4。在“约束”栏中,添加三个约束条件:$B$2=35(即总头数等于35),$B$3和$B$4为整数,如图 7所示。

图 7规划求解对话框

规划求解参数设置完毕后,按下“求解”按钮,Excel很快地给出了正确答案:鸡数B3单元格为35,兔数B4单元格为11.99999975。求解结果中兔数为小数形式,是规划求解过程中的计算误差。因为本问题是二元一次方程组求解,属于线性问题,用户可以在规划求解参数对话框中按下“选项”按钮,选中“采用线性模型”即可在计算结果中正确显示整数。

使用规划求解,可以利用计算机高速计算的特点对复杂问题建模求解,同样的思路也适合于解决多解的方程问题。

四、 利用矩阵函数,线性代数思路解决问题

鸡兔问题是二元一次方程组,可以利用线性代数方法进行求解。根据题意列出二元一次方程组为:

其中x为鸡数,y为兔数。根据方程组由线性代数方法可以列出如下两组矩阵A和矩阵B:

设所求矩阵为x,则方程组转化为AX=B,即

根据如上的数学分析,我们可以利用Excel中矩阵函数的独特功能,使用矩阵逆函数MINVERSE对矩阵A求逆,然后利用矩阵乘函数MMULT对矩阵A的逆矩阵和B矩阵进行乘法运算,得到的结果矩阵就是方程组的解。

具体做法如下(参见图 8):

1. 在A1:B2区域中输入矩阵A的数值,在D1:D2区域中输入矩阵B的数值;

2. 求取A的逆矩阵。选中B4:C5单元格,输入数组公式=MINVERSE(A1:B2),确认时必须按下Ctrl+Shift+Enter组合键;

3. 求取A的逆矩阵和B矩阵的乘积。选中B7:B8单元格,输入数组公式=MMULT(B4:C5,D1:D2),确认时必须按下Ctrl+Shift+Enter组合键;

4. B7、B8单元格的计算结果为23和12,即鸡数为23,兔数为12。

图 8 矩阵函数求解

使用矩阵函数的方法,在本质上是解决数学中的n元一次方程组的问题,具有比较广泛的通用性。

五、 使用VBA编程求解

鸡兔问题也可以编程解决。打开菜单“工具”à“宏”à“Visual Basic编辑器”,选择VBA编辑器的“插入”à“模块”菜单,并输入如下代码:

Sub chickrabbit()

For chick = 1 To 35

For rabbit = 1 To 35

If (chick + rabbit = 35) And (2 * chick + 4 * rabbit = 94) Then

MsgBox "鸡的数量为" & chick & ",兔为" & rabbit

End If

Next rabbit

Next chick

End Sub

编辑完毕后关闭VBA窗口,然后选择“工具”à“宏”,然后执行chickrabbit宏,就会弹出正确答案,如图 9所示。该程序可以做进一步的改进,例如可以改进执行方式、直接调用工作表数据、将输出结果显示在Excel单元格中等等,篇幅所限,不再赘述。

图9

本文分别使用了IF函数试探、双变量模拟运算表、规划求解、矩阵函数和VBA编程等方法对古典鸡兔问题进行求解,目的并不是求解简单数学问题的答案,而是旨在通过多种方法求解,展示Excel的多功能性和解决方式的灵活性,进一步开拓分析问题、解决问题的思路。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有