Python编程算法【十六】 爱因斯坦的数学题
【案例内容】
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶。只有每次跨7阶,最后才正好跨完,一阶都不剩。请问在1到n内,有多少个数能满足?
【解题思路】
从直观的角度来看,本题要求一个数,假设为i,则 i 应同时满足以下条件:
i % 2 == 1,i % 3 == 2,i % 5 == 4,i % 6 == 5,i % 7 == 0,
然后用一个for循环,配合if语句,就能找出1到n内,所有满足的数字。
但仔细看题,第一个条件“每步跨2阶,则最后剩1阶”,即 i % 2 == 1 可以得知,i 是一个奇数,那么在for循环中,我们就可以设置步长为2,这样可以省去一个判断条件。
再从 i % 6 == 5,可得知最小的 i 是11,而 i % 7 == 0,也就是 i 是7的倍数,再结合前一个条件,可知 i 至少从14开始,由于又是奇数,那么 i 至少从15开始,因此题目中的“1到n”,实际上是从“15到n”,这样可以省去判断1-14这些数字,直接从15开始,提高程序的执行效率。
【Python代码】

当然,用户输入的n值,一定要比15大,读者可进一步对此做判断。为了方便统计满足条件的个数,特意设定了一个num列表,把符合条件的数字都加到该列表中,最后通过len函数,便可得知15~n范围内,满足题意的数字到底有多少个。

