鱼C论坛

 找回密码
 立即注册
查看: 10864|回复: 22

python第6课 “爱因斯坦阶梯”问题的疑问

[复制链接]
发表于 2014-3-5 00:18:13 | 显示全部楼层 |阅读模式
10鱼币
原题:
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。



我看了好几遍也看不懂小甲鱼老师的答案,弱弱的问下我的这个解决方式是否有效?{:7_163:}


i = 1                   #做为起始数#
while i < 10000:
        if (i%2 == 1 and i%3 == 2 and i%5 == 4 and i%6 == 5 and i%7 == 0) == True :
                print (i)
        i += 1

最佳答案

查看完整内容

你的做法也是对的,算出了从1到10000之间符合条件的数 小甲鱼老师的代码其实有解释 flag这个变量是作为一个标志位,代表符合条件的阶梯数,x初始化为7,代表从7开始找出符合条件的阶梯数。 没有把i%7==0放入条件中,是因为else那儿已经对不符合条件的进行递增了,每次都增加7的整倍数。 当flag为1时说明条件符合,算出了正确的阶梯数,然后输出结果。 但是只能输出符合条件的一个结果,你的代码输出了符合条件的从1到10000之 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-5 00:18:14 | 显示全部楼层
你的做法也是对的,算出了从1到10000之间符合条件的数
小甲鱼老师的代码其实有解释
flag这个变量是作为一个标志位,代表符合条件的阶梯数,x初始化为7,代表从7开始找出符合条件的阶梯数。
没有把i%7==0放入条件中,是因为else那儿已经对不符合条件的进行递增了,每次都增加7的整倍数。
当flag为1时说明条件符合,算出了正确的阶梯数,然后输出结果。
但是只能输出符合条件的一个结果,你的代码输出了符合条件的从1到10000之间的阶梯数。
  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('在程序限定的范围内找不到答案!')
复制代码

评分

参与人数 1鱼币 +5 收起 理由
dandd31 + 5 感谢版主大大,抽空解答。

查看全部评分

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

使用道具 举报

发表于 2014-3-5 13:04:18 | 显示全部楼层
本帖最后由 飛魚 于 2014-3-5 13:06 编辑

你这会循环一万次吧。。。无论结果对不对都不会停止循环。。。小甲鱼的答案贴在这里,当时我也是很困惑
你那里的if ==True是没必要的,因为条件成立的时候就返回True,不成立就False
  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)
  9.         i += 1
  10. if flag == 1:
  11.     print('阶梯数是:', x)
  12. else:
  13.     print('在程序限定的范围内找不到答案!')
复制代码
现在大概理解了一些。

X是总阶梯数,初始化x=7
当同时满足if里的条件,循环结束
如果不满足,则循环+1
至于 x = 7 * (i+1)怎么理解,现在还很模糊,所以可以写成这样:
  1. for x in range(1000):
  2.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 ==0):
  3.     print('阶梯数是:', x)
  4.     break
复制代码





评分

参与人数 1鱼币 +5 收起 理由
dandd31 + 5 谢谢 &gt;.&lt;

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-3-5 13:19:03 | 显示全部楼层
谢谢二位大大的回复,已经看明白小甲鱼老师的答案了。顺带在弱弱的问一下,IF 之后的条件都是默认为True的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-5 13:37:10 | 显示全部楼层
if 就是判断 True or False的过程。
if a < 0:
    print(1)
else:
    print(0)
如果a<0那么条件为真,执行print(1)
如果a==0或者a>0,条件为假,执行else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-6 09:27:26 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 12:48:54 | 显示全部楼层
我来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 15:10:10 | 显示全部楼层
为什么不用for、break呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-7 15:07:19 | 显示全部楼层
你的做法也有效,而且我觉得更简洁一些~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-5 04:34:04 From FishC Mobile | 显示全部楼层
赞同,这样可以计算出很多符合条件的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-26 17:14:56 | 显示全部楼层
flag=1和后面flag==1的区别是什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-19 16:25:28 | 显示全部楼层
感觉楼主的做法更简洁呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-12 14:30:00 From FishC Mobile | 显示全部楼层
你这样虽然很直接,但算法效率会低
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 22:30:22 | 显示全部楼层
i=1
while i>0:
    i+=1
    if (i%2==1) and (i%3==2) and (i%5==4) and (i%6==5) and (i%7==0):
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-6 00:01:01 | 显示全部楼层
我这样写可以吗
foot=1
while not (foot%2==1 and foot%3==2 and foot%5==4 and foot%6==5 and foot%7==0):
    foot=foot+1
print(foot)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-25 15:23:15 | 显示全部楼层
s = 1
while ((s % 2) != 1) or ((s % 3) != 2) or ((s % 5) != 4) or ((s % 6) != 5) or ((s % 7) !=0):
    s += 1
print(s)
我的做法···感觉运算次数会比小甲鱼老师的高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-31 22:42:27 | 显示全部楼层
这样写可以吗?

  1. i = 1

  2. while i:
  3.     if (i % 2 == 1) and \
  4.        (i % 3 == 2) and \
  5.        (i % 5 == 4) and \
  6.        (i % 6 == 5) and \
  7.        (i % 7 == 0):
  8.         print(i)
  9.         break
  10.     i = i + 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 22:26:06 | 显示全部楼层
  1. i = 1
  2. x =7
  3. flag = 0
  4. while i<=100:
  5.     if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 :
  6.         flag =1
  7.     else:
  8.         x= 7*(i+1)
  9.     i+=1
  10. if flag==1:
  11.     print(x)

  12. else:
  13.     print("can't find")
复制代码


感觉不对,输出是707,我自己的代码输出是119
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 22:38:26 | 显示全部楼层
  1. a = 0
  2. while not (( a % 2 == 1) and ( a % 3 == 2 ) and (a % 5 == 4) and ( a % 6 == 5) and (a % 7 == 0)) :
  3.     a = a + 1
  4. print(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-17 22:26:49 | 显示全部楼层
i=0
while (i%2 != 1) or (i%3 != 2) or (i%5 != 4) or (i%6 != 5) or (i%7 != 0):
    i =i+1

print('楼梯阶数是:' ,+ i)
我是这样想的,有大佬告知一下最后一行print('楼梯的阶数是:'  ,+i)这里一定要加一个逗号吗?我不加逗号会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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