爱因斯坦的数学题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
爱因斯坦的数学题
作者:
来源:《电脑报》2022年第05期
常言说得好:“天才在左疯子在右,而中间的大部分人,都是普通人。
”在這个世界上能够被称为天才的人,是不多的,爱因斯坦就是其中之一。
有个谣传是说爱因斯坦数学不好,其实这个不好是相对于当时顶尖数学家说的,爱因斯坦只是兴趣不在于此。
今天就和大家分享一道爱因斯坦提出的一道数学题。
有一条长长的阶梯,如果每步跨2台阶,最后剩下1个台阶;如果每步跨3台阶,最后剩下2台阶;如果每步跨5台阶,最后剩下4台阶;如果每步跨6台阶,最后剩下5台阶;如果每步跨7台阶时,最后才正好一台阶都不剩。
请问这条阶梯共有多少台阶呢?
根据题目的意思我们可以列举出数学公式:
设:X为总台阶数
X/2=1;X/3=2;X/5=4;X/6=5;X/7=0
分析后你会发现,本题的关键就是计算2、3、5、6的最小公倍数30的问题,阶梯的阶数应该比30的倍数少1,并且还是7的倍数,即30n-1=7m,只需找到合适的n和m即可。
当然以上的分析只是通过数学逻辑的方法解决问题,如果转换成编程该如何编写呢?思路的不同,编写程序的代码的方式也大不相同,就像莎士比亚所说的,“一千个读者,就有一千个哈姆雷特”。
我用两种算法来解决这个问题:穷举法和排除法。
穷举法我们之前也讲过不少的例子,比如鸡兔同笼等。
设置初始num值为1,通过循环的方式让num的值不断累加,每次累加1,并且在循环中根据条件进行判断,与2的余数是否为1,与3的余数是否为2……一旦有相符合匹配成功的数值就将其添加入列表中。
穷举法有一定的局限性,效率较低,计算量比较大。
除了穷举法我们还可以使用排除法,在编程前,我们通过简单的梳理已经了解台阶数是7的倍数,创建一个列表将7的倍数依次添加入此列表中,这里我加入了150个7的倍数。
设定一个因数为2,通过循环每次将因数的值加1,当因数值为4时,强制再加1,修改成5,这样下一个因数就是6了。
通过循环嵌套的方式将列表中每一项的值依次除以因数(2、3、5、6)得出余数,判断余数是否符合条件,若条件不成立删除列表中对应的项,程序运行结束后便得到正确的数值。
不同的思路与方法所编程的代码也是大不相同,我认为学习编程,重要的不是如何写出华丽的代码,而是要学会思考,通过模块化设计做到如何能够更省力、更快捷地完成程序,提高运行效率。