家里的小学生拿着一道小学数学题来问我。
题目是这样的。
有一个小于500的三位数abc,对于这个三位数,甲乙丙丁有如下说法:
甲:这个三位数能被2整除3次;
乙:这个三位数能被3整除2次;
丙:这个三位数能被7整除;
丁:这个三位数的各个数字之和是15;
已知甲乙丙丁中有一个人说谎了;请问这个三位数是多少?
emmm……这不就是一道逻辑题嘛!
先假如丁错,则甲乙丙对,此时最小的abc=(2^3)*(3^2)*7=504>500,不在题干范围之内。
那么也就是丁必对,甲乙丙中有一错。
等一下,
然后嘞?
并不能判断甲乙丙哪个错啊!!!
难道要先假设甲乙丙中一个是错误,然后挨个穷举看哪个三位数满足丁(各个数字之和是15)的条件吗?
这不科学!与其穷举,不如python!
循环+判断走起!
成功得到答案:
乙说谎,abc=168
事情到这里,我完全忽略了一个问题。
这是一道应用题,
光是知道答案是没用的,
总不能写几行代码交上去吧。
于是,我靠着编程思维,
再次提取出题目中的有效信息。
按照甲的说法,abc能被2^3=8整除。
按照乙的说法,abc能被3^2=9整除。
按照丙的说法,abc能被7整除。
按照丁的说法,abc相加为15。
并且,绞尽脑汁回想小学数学阶段的知识点。
终于!是整除的特性!
被3整除:数字之和能被3整除(逢3必消)
被9整除:数字之和能被9整除(逢9必消)
同时,丁的说法中还有隐藏条件:abc能被3整除,不能被9整除。
这样一来,乙与丁的说法就是矛盾的。
假如丁错,则甲乙丙对,此时最小的abc=(2^3)*(3^2)*7=504>500,不在题干范围之内。
所以乙错了,甲丙丁是对的,此时abc能被8(甲)、7(丙)、3(丁)整除,则abc是8*7*3=168的倍数。小于500的168的倍数有168、336,只有1+6+8=15。
故abc = 168。
很好,解题思路清晰,答案正确,小学生也能理解。
用python解数学题
从计算机这个名字就可以看出来,它的本行就是计算,起初发明计算机也是用来处理复杂计算用的。而编程语言,例如人工智能时代盛行的python,也是完全可以用于解决数学问题,并且逐渐培养逻辑思维能力的。
编程可以让你将数学课上一些晦涩难懂的内容变得简单直观,也能让你轻松地绘图、调整、探索,进而发现更多乐趣。
通过循环来计算对同一个函数输入不同参数的结果。如果用人手计算,可能要花半个小时的时间,但计算机瞬间就完成了。在这样的基础上,我们只要将一些计算的过程抽象成一个函数,再对其进行一些适当的扩展,就可以让计算机来计算了。
优必学提供从幼儿园到高中不同阶段的人工智能教育整体解决方案。通过与全球顶级高校和高科技企业的通力合作,优必学以课程赋能为抓手,致力于构建“内容+硬件+软件+服务”的AI教育生态圈。