鱼C论坛

 找回密码
 立即注册
查看: 2986|回复: 14

第6讲,课后题,爱因斯坦的问题,我有两个问题很困惑,大家有兴趣可以帮忙看看

[复制链接]
发表于 2017-2-19 22:43:16 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 鱼的泪 于 2017-2-19 22:58 编辑

课后题目:
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶梯,最后剩下2阶梯;若每步上5阶,最后剩下4阶,若每步上6阶,最后剩下5阶;只有每步上7阶,最后刚好一阶也不剩。
问:请编程求解阶梯至少有多少阶?

小甲鱼老师给的参考答案:
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.     else:
  8.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  9.     i += 1

  10. if flag == 1:
  11.     print('阶梯数是:', x)
  12. else:
  13.     print('在程序限定的范围内找不到答案!')
复制代码
疑惑一:当i=16 时,为什么跳出循环了 ?             (我的理解:当i=16时, 得出x=119,i=17循环,进入if判断,得出flag=1,i=18,继续循环才对呀)
疑惑二:i += 1,和它上一排 x = 7 * (i + 1) 对齐后,就得不到正确答案了            (我的理解: i +=1 和它上一排 x = 7 * (i + 1) 对齐后,应该不影响得出正确答案)





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-19 22:58:35 | 显示全部楼层
while的判断是 i < =100才跳出循环 否则一直循环下去。
所以我们来看,
1,if的循环是判断x 是不是符合if的条件,不符合执行else语句,然后直到 119才发现符合。执行语句 flag = 1
2,关键点:执行if 的语句里面没有给X赋值了。所以一直重复执行flag =1 84次。然后跳出循环体。
3,打印阶梯书。、、


关于你的疑惑二是这个情况:
1,如果 i 放进去了 那么是隶属于else的语句了。
一旦出出现了符合if语句的情况。 这个I +=1就无法实现。
然后因为 while条件是小雨等于100.所以就是死循环了。
你可以试试看吧I 改为 小与10  就知道了。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
鱼的泪 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-19 23:17:28 | 显示全部楼层
vincenzo0823 发表于 2017-2-19 22:58
while的判断是 i < =100才跳出循环 否则一直循环下去。
所以我们来看,
1,if的循环是判断x 是不是符合if ...

非常感谢, 解决了我两个困惑
豁然开朗,第17次循环应该 x=119 i=17 进入,得flag=1,i=18,x=119不变 三个参数才对,  
                 第18次循环应该 flag=1,i=18,x=119进入,得flag=1,i=19,x=119不变
                  ......
                 第100次 flag=1,i=100,x=119进入,跳出循环
                flag=1,i=100,x=119进入最后面一个if判断

这次逻辑清晰了  


         

               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-20 10:40:21 | 显示全部楼层
学习到了很多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-26 19:23:48 | 显示全部楼层
感谢楼主分享 学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-27 19:58:49 | 显示全部楼层
题目也可以这样理解
条件一、i+1 可以被2、3、5、6整除
条件二、i可以被7 整除
程序改成
i = 0
while i < 1000:
         if (i+1)%2= 0 and (i +1)%3= 0 and (i+1)%5 and (i+1)%6=0 and i%7=0:
                     print(i, end ='  ')
                     i += 1
         else:
                     i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-28 11:39:01 From FishC Mobile | 显示全部楼层
vincenzo0823 发表于 2017-2-19 22:58
while的判断是 i < =100才跳出循环 否则一直循环下去。
所以我们来看,
1,if的循环是判断x 是不是符合if ...

大神。有个疑惑求解答  为什么要加一个flag参数进去 不能直接在第一个if条件判断下面直接输出阶梯数吗 flag 在这的作用是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-28 15:55:58 | 显示全部楼层
哨子1122 发表于 2017-2-28 11:39
大神。有个疑惑求解答  为什么要加一个flag参数进去 不能直接在第一个if条件判断下面直接输出阶梯数吗 fl ...

不加flag,就还会继续算下去,这个题目的答案其实不止一个,119只是第一个答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-28 22:55:23 | 显示全部楼层
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.     else:
  8.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  9.     i += 1
  10.     print (i) #这里加上一个print,你看看结果~

  11.     if flag == 1:
  12.         print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码


是不是循环还在继续,只是因为flag =1了而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-1 00:34:49 | 显示全部楼层
本帖最后由 鱼的泪 于 2017-3-1 00:37 编辑
aarontang1989 发表于 2017-2-27 19:58
题目也可以这样理解
条件一、i+1 可以被2、3、5、6整除
条件二、i可以被7 整除


你的想法启发了我, 我写的代码,你执行下试试:
我觉得你理解的还是 有些问题的
条件一 : temp 代表 阶梯数
             需满足 (temp-1)%2 == 0 and (temp-2)%3 == 0 and (temp-4)%5 == 0 and (temp-5)%6 == 0

  1. i = 0   
  2. while i < 100:
  3.     temp = i*7     # temp 阶梯数 7的倍数
  4.     if (temp-1)%2 == 0 and (temp-2)%3 == 0 and (temp-4)%5 == 0 and (temp-5)%6 == 0:
  5.         break      # 满足条件 跳出循环
  6.         
  7.     else:
  8.         i += 1      
  9. print('阶梯数是:', temp)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-1 00:59:40 | 显示全部楼层
自然水 发表于 2017-2-28 22:55
是不是循环还在继续,只是因为flag =1了而已。

不是因为 flag = 1  这个条件才循环的,有它没它,程序都会先把while 循环 ,循环运行 100次,得  i=100,x=119
加上 flag = 1  这个标志后,程序才会, 通过 if 语句判断,何时打印阶梯数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-1 18:18:46 | 显示全部楼层
我可以问一下吗   就是那个
else:
      x = 7 * (i+1)
这里的 i+1 是为了什么?
为什么要 i+1 ?
实在不明白这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-1 19:59:39 | 显示全部楼层
lulu_ 发表于 2017-3-1 18:18
我可以问一下吗   就是那个
else:
      x = 7 * (i+1)

是为了  让 阶梯数 每次 递增 7,再去验证 第6行代码的 if 条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-2 20:22:36 | 显示全部楼层
鱼的泪 发表于 2017-3-1 19:59
是为了  让 阶梯数 每次 递增 7,再去验证 第6行代码的 if 条件

可是乘以i不就好了吗?  为什么还要加1   
我的理解就是 (i不用加1  因为  本来下面就有个i += 1,所以到第二次循环的时候就会自动i=2 ,为什么还要加1?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-3 19:29:57 | 显示全部楼层
lulu_ 发表于 2017-3-2 20:22
可是乘以i不就好了吗?  为什么还要加1   
我的理解就是 (i不用加1  因为  本来下面就有个i += 1,所以 ...


都可以得出正确答案,区别见下图,
23.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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