首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络办公
用excel解决经典“鸡兔问题”的五种方法_excel教程
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
  “鸡兔问题”是一道古典数学问题,源自我国古代四、五世纪的数学著作《孙子算经》。算经卷下第三十一题为:“今有雉、兔同笼,上有三十五头,下有九十四足。问雉、兔各几何?”原著的解法为:“上署头,下置足。半其足,以头除足,以足除头,即得。”具体解法即:分别列出总头数(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的多功能性和解决方式的灵活性,进一步开拓分析问题、解决问题的思路。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·JSP+JAVABEAN+SERVLET开发环境配置指南-JSP教程,Jsp/Servlet
·.net中webform和winform连接sql server 2000数据库的c#操作类-.NET教程,数据库应用
·C#中调用Windows API的要点-.NET教程,C#语言
·将.net组件注册为com组件-.NET教程,组件控件开发
·php上传、管理照片示例-PHP教程,PHP应用
·对通信电源维护管理工作的几点考虑——李晓明
·用c#写的贪吃蛇游戏,简简单单-.NET教程,C#语言
·java连接oracle,取io文件内容,子串替换-JSP教程,Java技巧及代码
·CASSINI源代码分析(1)-.NET教程,面向对象编程
·转换DataSet到普通xml的新法-.NET教程,数据库应用
最新文章
·office工具栏的配置管理与重置操作_办公软件教程
·word 2007表格简单计算和数字格式转换_word教程
·重命名office工具栏、菜单和菜单命令_办公软件教程
·移动或复制office按钮、菜单或菜单命令_办公软件教程
·word2007中快速插入固定内容的技巧_word教程
·修改word默认设置 让它用起来更顺手_word教程
·office文字快速录入技巧_办公软件教程
·编辑office菜单或按钮的键盘加速键_办公软件教程
·用excel 2007制作能互动的函数图像_excel教程
·将超链接分配给工具栏按钮或菜单命令_办公软件教程
相关主题
  • 用excel剿灭dll木马_病毒防治教程
  • 用excel 2007制作能互动的函数图像_excel教程
  • 用excel函数快速统计学生期中考试成绩_excel教程
  • 用excel打出考试成绩表来_excel教程
  • 用excel表格帮忙绘制autocad同心圆_excel教程
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭