经典数学问题“鸡兔同笼”居然被编程给巧妙解决了?
大约在1500年前,我们的老祖宗写了一本数学奇书《孙子算经》(这个孙子可不是是那个提出“知己知彼”的军事家孙子),下卷第31题记载了一个很好玩的数学问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”
这道题就是后世“鸡兔同笼”的始祖,如今已被义务教育课程标准实验教科书人教版数学五年级上册选为补充教材并且在部分五~六年级的课外习题所用。
关于这道题的解法有很多种,这一次我们试着用编程软件Scratch求出了答案,并录制了完整的解题过程,希望帮助大家更好地理解如何运用编程解决简单、有趣的数学问题。
不过在开始之前,需要先明白一个问题:我们为什么要学数学,它和编程有何关系?
中科院院士、数学教授李大潜给出了答案:数学能够提高我们的素质和能力,这些素质和能力包括:严密的逻辑思维能力、高度的抽象思维能力、自觉形成数量观念、让我们变得更细心。
李大潜教授
数学和编程关系紧密,具备数学+编程的人优势会更大,这和它们之间的联系密切相关。
数学和编程的关系
1. 编程所需要的很多能力和数学是相通的。比如逻辑思维、模式识别等。现在机器学习用到的算法,其本质还是数学模型计算问题。
2. 编程能够帮助孩子更好地理解数学抽象概念。孩子们可以通过编程将抽象的数学概念转化为看得见的、会动的图像。
例如最常用的函数,书本上的概念理解起来很抽象,通过编程就可以在计算机上展示出来。
Sin和Cos在三角形上的运用:
3. 编程能够强化孩子的数学能力。如果孩子想用代码建造飞机,那就要用到各种各样的数学知识,并且还要调用抽象思维的能力。
想清楚了这两个问题哦,我们再看编程解决数学问题的过程收获会更多。
开始,需要搞清楚编程解决数学问题的逻辑:我们要解出的数学答案是什么(求兔子和鸡的数量)——梳理出这个问题的逻辑——确定用怎样的公式计算——在草稿纸上画出流程图——将这个顺序转化为代码语言——输入计算机得出结果。
下面一步步细分
:
第一步:添加角色
左下角的角色区添加角色,分别是公鸡、兔子、笼子各一个:
第二步:设置逻辑运算
1. 笼子角色的脚本要根据已知条件算出结果,并在界面显示出结果(白框里的文字),我们输入题目中已知条件:
我们要求鸡和兔子的数目,就是要解出两个未知数,把它转化为代码语言,这就需要创建两个变量来代表这两个未知数(兔子和鸡)。
现在根据已知条件输入兔+鸡=35,兔x4+鸡x2=94,注意左边的绿色框,里面包含了很多逻辑关系:“且”、“或”等等。孩子在这一步要思考:这两个式子是缺一不可还是满足一个就行呢?这就是对孩子逻辑思维最好的训练。
接着输入变量(发散下思维:分析一个问题时,教会孩子找出它的变量,问题就会好解决很多):
完整代码如下:
鸡和兔要执行的任务是:当它们接受到“计算鸡兔多少只”这个指令时,就要分别“喊出”结果,兔子的代码是这样的:
鸡的代码是这样的:
最后的结果是:
我们求出了答案,孩子在过程中对逻辑关系“且”、“或”等有了更深的了解,对变量也会有初步认识,这些收获都能给孩子一些启示,有助于孩子以后高效地处理任何问题。
这就是数学+编程的强大之处。
关于编程学习的一些建议
最后分享一些学习编程的建议:
学习编程的前提是孩子一定要对编程感兴趣。孩子有兴趣了,就可以选择合适的编程语言。
目前比较流行的编程语言有Python、C++、Java等,而适合小朋友学习的主要是图形化编程Scratch、Python、以及面向NOIP竞赛的C++语言。Python已经成为浙江2018年高考内容。
对于零基础、年满7岁的孩子,我们建议从Scratch这款由美国麻省理工研发的图形化编程软件开始学习,简单、有趣、易上手,用积木块代替了枯燥的代码,孩子短时间内就能学会它。
Scratch操作界面