鸡兔同笼那么多种解法,吾独爱这一种

鸡兔同笼,是我国古代著名趣题之一,记载于《孙子算经》之中。

原题是“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”

1

常规方法

常规方法大概有这么几种:

1、极端假设法

假设全是鸡:2×35=70(只);鸡脚比总脚数少:94-70=24 (只);兔子比鸡多的脚数:4-2=2(只);兔子的只数:24÷2=12 (只);鸡的只数:35-12=23(只)

2、二元一次方程组

设鸡有x只,兔有y只。X+Y=35;X+4Y=94.

解得: X=23;Y=12.

即:兔子有12只,鸡有23只。

3、抬腿法

假如鸡与兔子都抬起两只脚,还剩下94-35×2=24只脚 , 这时鸡是屁股坐在地上,地上只有兔子的脚,而且每只兔子有两只脚在地上,所以有24÷2=12只兔子,就有35-12=23只鸡。

(《奔跑吧!兄弟》包贝尔用的就是这个方法,话说光头都这么聪明嘛?)

2

图形化编程工具——Scratch

以上三种方法还是非常考验数学思维的。

这道题,如果交给计算机来做,又能按照什么样的步骤解决呢?

小猿试着分析了一下:

1、确定目标——求解兔子和鸡的数量,必须是整数;

2、关键条件——兔子和鸡的个数加起来是35。每只兔子4只脚,每只鸡2只脚,还需要保证兔子的个数*4+鸡的个数*2=94;

3、代入计算,循环执行,直到找到满足条件的兔子和鸡的数量。

如果用图形化编程工具——Scratch,大概有这么几步:

1

创建变量

在脚本区域——数据,分别创建兔和鸡两个变量,将初始值设置为1.

2

设置逻辑条件

在脚本区域——控制,选择“重复执行直到……”,在六边形内添加关键条件,即兔*4+鸡*2=94.

怎么操作呢?这里就用到运算模块和数据模块的两个变量。记得从外到内逐级添加,先添加等式,再将相加式拖放到等式左边,确定位置时底部会出现一个白色提示。

3

设置运算规则

我们要明确计算机解这道题的逻辑,其实就是代入运算。从鸡等于1开始验算,也可以设置兔和鸡同时从1开始验算,但其实没必要,鸡和兔都只有一个头,那么假设鸡是1只,兔就应该是35-1=34只。

这里增加计算机循环计算的规则:

点击绿色的小旗帜,开始运行,左上角就会显示答案:

3

真正的编程语言——Python

如果用python来计算呢?

for chicken in range(35):

for rabbit in range(35):

if (2 * chicken + 4 * rabbit) == 94 and (chicken + rabbit) == 35:

print("一共有{}只鸡,{}只兔子".format(chicken, rabbit))

4行代码解决问题!

翻译过来就是:

鸡的数量在1~35之间

兔的数量也在1~35之间

如果鸡*2+兔*4=94,并且鸡+兔=35

输出一共有多少只鸡,多少只兔。

感觉就像念了一遍题,答案就出来啦!

小朋友可能有疑问,代码里为什么是两个=?

在Python里,==表示相等,用于检查两个东西是否相等,因为=的功能是赋值。

小猿总结了Python里不太常见的运算符和操作符,见下表:

昵称

奖项

+=

自增 - 将一个数增加1

-=

自减 - 将一个数减1

%

取模 - 返回除法的余数

==

相等 - 检查两个东西是否相等

小于等于 -返回x是否小于等于y

>=

大于等于- 返回x是否大于等于y

不等于 - 比较两个对象是否不相等

!=

不等于 - 比较两个对象是否不相等

//

取整除 - 返回商的整数部分

**

幂 - 返回x的y次幂

最后小猿要剧透下,问题的提出者——孙子的解决方法。

原来孙子提出了大胆的设想。他假设砍去每只鸡、每只兔一半的脚,则每只鸡就变成了"独脚鸡",而每只兔就变成了"双脚兔"。

这样,"独脚鸡"和"双脚兔"的脚就由94只变成了47只;而每只"鸡"的头数与脚数之比变为1:1,每只"兔"的头数与脚数之比变为1:2.

由此可知,有一只"双脚兔",脚的数量就会比头的数量多1。所以,"独脚鸡"和"双脚兔"的脚的数量与他们的头的数量之差,就是兔子的只数,即:47-35=12(只);鸡的数量就是:35-12=23(只)。

是不是觉得孙子的思维很巧妙!

只是一旦把鸡换成蜈蚣,兔子换成螃蟹,或者增加动物的种类到3~5种,这个方法可能就不好用了,而编程作为一套解决问题的思路,依然适用

眼前掌握一些算术技巧固然值得欣喜,但要着眼于未来,编程思维才是更深层的竞争力。

比起人脑,计算机可以帮我们更高效地解决问题,世界三大数学猜想之一四色定理就是通过计算机证明的。论脚力,我可能比很多人都跑得慢,但那有什么关系,可以坐飞机啊!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180402G1R14N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券