鸡兔同笼,是我国古代著名趣题之一,记载于《孙子算经》之中。
原题是“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”
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种,这个方法可能就不好用了,而编程作为一套解决问题的思路,依然适用!
眼前掌握一些算术技巧固然值得欣喜,但要着眼于未来,编程思维才是更深层的竞争力。
比起人脑,计算机可以帮我们更高效地解决问题,世界三大数学猜想之一四色定理就是通过计算机证明的。论脚力,我可能比很多人都跑得慢,但那有什么关系,可以坐飞机啊!
领取专属 10元无门槛券
私享最新 技术干货