python第6课 “爱因斯坦阶梯”问题的疑问
原题:爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上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之间的阶梯数。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('在程序限定的范围内找不到答案!') 本帖最后由 飛魚 于 2014-3-5 13:06 编辑
你这会循环一万次吧。。。无论结果对不对都不会停止循环。。。小甲鱼的答案贴在这里,当时我也是很困惑
你那里的if ==True是没必要的,因为条件成立的时候就返回True,不成立就False
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)
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')现在大概理解了一些。
X是总阶梯数,初始化x=7
当同时满足if里的条件,循环结束
如果不满足,则循环+1
至于 x = 7 * (i+1)怎么理解,现在还很模糊,所以可以写成这样:
for x in range(1000):
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 ==0):
print('阶梯数是:', x)
break
谢谢二位大大的回复,已经看明白小甲鱼老师的答案了。顺带在弱弱的问一下,IF 之后的条件都是默认为True的吗? if 就是判断 True or False的过程。
if a < 0:
print(1)
else:
print(0)
如果a<0那么条件为真,执行print(1)
如果a==0或者a>0,条件为假,执行else 飛魚 发表于 2014-3-5 13:37 static/image/common/back.gif
if 就是判断 True or False的过程。
if a < 0:
print(1)
非常感谢 {:7_148:} 我来看看 为什么不用for、break呢 你的做法也有效,而且我觉得更简洁一些~ 赞同,这样可以计算出很多符合条件的数 flag=1和后面flag==1的区别是什么呢? 感觉楼主的做法更简洁呢 你这样虽然很直接,但算法效率会低 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) 我这样写可以吗
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) 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)
我的做法···感觉运算次数会比小甲鱼老师的高 这样写可以吗?
i = 1
while i:
if (i % 2 == 1) and \
(i % 3 == 2) and \
(i % 5 == 4) and \
(i % 6 == 5) and \
(i % 7 == 0):
print(i)
break
i = i + 1 i = 1
x =7
flag = 0
while i<=100:
if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 :
flag =1
else:
x= 7*(i+1)
i+=1
if flag==1:
print(x)
else:
print("can't find")
感觉不对,输出是707,我自己的代码输出是119 a = 0
while not (( a % 2 == 1) and ( a % 3 == 2 ) and (a % 5 == 4) and ( a % 6 == 5) and (a % 7 == 0)) :
a = a + 1
print(a) 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)这里一定要加一个逗号吗?我不加逗号会报错。
页:
[1]
2