鱼C论坛

 找回密码
 立即注册
查看: 1548|回复: 4

[已解决]课后作业求助

[复制链接]
发表于 2021-11-20 00:07:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上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呢?
最佳答案
2021-11-20 04:11:58
本帖最后由 lightninng 于 2021-11-20 11:30 编辑

看了下面的回复,感觉自己说错了。应该是4楼的兄弟说的原因~~


先上结论,100这个数字是一个远远超出答案所在范围的设定,这么做的目的大概是为了防止找不到答案的情况出现吧,当然甲鱼兄还是温馨的给我们编写了没有找到答案时的处理代码(代码中最后两行)...
那么问题在于,正确答案的范围怎么来估计呢?
这其实是一个数学问题,这个问题中涉及到有倍数有2,3,5,6,7这5个数字的公倍数是210,所以你从起点开始,不论用2,3,5,6,7哪一种方式,都会走到210这里,相当于重新开始一个新的循环,所以这个台阶数一定是小于等于210的。
那么这个结论的推论就是,while循环中这个循环结束的条件判断语句数值不能小于29,否则就有可能因为漏掉正解而无法找到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-20 04:11:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lightninng 于 2021-11-20 11:30 编辑

看了下面的回复,感觉自己说错了。应该是4楼的兄弟说的原因~~


先上结论,100这个数字是一个远远超出答案所在范围的设定,这么做的目的大概是为了防止找不到答案的情况出现吧,当然甲鱼兄还是温馨的给我们编写了没有找到答案时的处理代码(代码中最后两行)...
那么问题在于,正确答案的范围怎么来估计呢?
这其实是一个数学问题,这个问题中涉及到有倍数有2,3,5,6,7这5个数字的公倍数是210,所以你从起点开始,不论用2,3,5,6,7哪一种方式,都会走到210这里,相当于重新开始一个新的循环,所以这个台阶数一定是小于等于210的。
那么这个结论的推论就是,while循环中这个循环结束的条件判断语句数值不能小于29,否则就有可能因为漏掉正解而无法找到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-20 10:25:09 | 显示全部楼层
本帖最后由 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
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-20 10:58:25 | 显示全部楼层
限定范围吧,只求出最小的满足条件的值,即119
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-20 11:34:40 | 显示全部楼层
大体思路如下:在循环中,即
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表