课后作业求助
爱因斯坦的难题爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
(小甲鱼温馨提示:步子太大真的容易扯着蛋~~~)
x = 7
i = 1
flag = 0
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
在没有台阶限制数的情况下,为什么会while循环 i<=100呢? 本帖最后由 lightninng 于 2021-11-20 11:30 编辑
看了下面的回复,感觉自己说错了。应该是4楼的兄弟说的原因~~
先上结论,100这个数字是一个远远超出答案所在范围的设定,这么做的目的大概是为了防止找不到答案的情况出现吧,当然甲鱼兄还是温馨的给我们编写了没有找到答案时的处理代码(代码中最后两行)...
那么问题在于,正确答案的范围怎么来估计呢?
这其实是一个数学问题,这个问题中涉及到有倍数有2,3,5,6,7这5个数字的公倍数是210,所以你从起点开始,不论用2,3,5,6,7哪一种方式,都会走到210这里,相当于重新开始一个新的循环,所以这个台阶数一定是小于等于210的。
那么这个结论的推论就是,while循环中这个循环结束的条件判断语句数值不能小于29,否则就有可能因为漏掉正解而无法找到答案
本帖最后由 jackz007 于 2021-11-20 10:26 编辑
代码修改一下,是不是更容易理解呢?
for x in range(7 , 701 , 7):
if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5):
print(x)
运行实况:
>>> for x in range(7 , 701 , 7):
if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5):
print(x)
119
329
539
>>> 限定范围吧,只求出最小的满足条件的值,即119{:5_109:} 大体思路如下:在循环中,即
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
当i小于等于100时,执行此循环,所以直到遇到正确答案为止,都在执行else判断,当i=16时,else中的x为119,之后i+1=17,再次执行循环,符合if条件,flag = 1,
同时符合第二个判断中的if,即
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
之后输出if中的句子,反之则会执行else的输出
————————————————————————————————————————————
然后为什么在else处会有一个i + 1呢?
原因就是要提前计算,或者叫提前验证,
以便在下一次循环中直接输出正确答案
而不是在下一次循环中输出上次的计算结果,即112
页:
[1]