鱼C论坛

 找回密码
 立即注册
查看: 1489|回复: 7

课后作业第006将

[复制链接]
发表于 2021-8-27 14:15:05 | 显示全部楼层 |阅读模式

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

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

x
求助各位大神,课后作业第006讲常用操作符最后一题

2. 爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上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('在程序限定的范围内找不到答案!')


想问一下,为什么一开始赋值x=7;i=1;flag又是什么,为什么赋值为0?
整题答案看了蒙圈,这应该要数学基础吧?看不懂!

这是第006讲的课后习题

这是第006讲的课后习题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-27 14:26:22 | 显示全部楼层
      简单问题被复杂化了,看看下面的等效代码,是否还有困难?
for x in range(7 , 700 , 7):
     if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5):
         print('最少阶梯数是:' , x)
         break
else:
     print('在程序限定的范围内找不到答案!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-27 16:24:49 | 显示全部楼层
x 初始化等于7是因为条件中需要满足被7整除,另外每次需要作为的判断条件是7的整数倍,那么就那7乘以1,2,3,每次判断不满足则 i + 1,flag初始为多少都无所谓哦,主要是后面判断flag = 1则输出结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-27 20:56:40 | 显示全部楼层
x为台阶数,由于“只有每步上七阶,最后刚好一阶也不剩”,所以x必须为7的倍数,所以从7开始。
i算是给程序上个保险,以防一直运算下去,后面老甲鱼也有相应代码“print("在程序限定范围内找不到答案")”。
flag算是为了告诉计算机,这个数也就是此时的x是我要的答案。
>>> while 1:
        print("12")
        break

12
>>> while 0:
        print("12")
        break

>>> 
就像上面代码一样,除了0以外的数字都被判定为True,0则为False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-27 21:57:15 | 显示全部楼层
>>> i=7
>>> while ((1!=i%2)or(2!=i%3)or(4!=i%5)or(0!=i%7)):
        i=i+1

        
>>> print(i)
119
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-7 11:09:09 | 显示全部楼层
jackz007 发表于 2021-8-27 14:26
简单问题被复杂化了,看看下面的等效代码,是否还有困难?

感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-7 12:02:25 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-7 12:05 编辑

想知道樓主是從哪裡得到這代碼的?最近很多人問同樣問題,代碼一模一樣,明顯代碼不優啊,我已經幫很多人解題了

代碼簡化:
i = 1
while True:
    if (i%2 == 1) and (i%3 == 2) and (i%5 == 4) and (i%6 == 5) and (i%7 == 0):
        print(i)
        break
    i += 1

通常不會有人已經知道要迴圈多少次數了還在用 while 的,既然已經知道次數,應該用 for 才正確,但這題用 while 沒有錯,只是不能局限 100次, 應該達到某條件就退出才是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-7 13:49:36 | 显示全部楼层
傻眼貓咪 发表于 2021-9-7 12:02
想知道樓主是從哪裡得到這代碼的?最近很多人問同樣問題,代碼一模一樣,明顯代碼不優啊,我已經幫很多人解 ...

谢谢大佬,我是查看了课后习题的答案的,因为第一次接触Python,纯小白哈哈,所以看起来晕了点,也可能是我逻辑不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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