|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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('在程序限定的范围内找不到答案!')
疑问:为什么结果输出是x=119 而不是x=700,但是i=707?
谢谢!
关键看这一段,每次循环的时候,当x不符合上面的条件,就会运行else的语句,就是把x在原有值上加7然后到下次循环再来验证,当发现了第一个相符的数119后,就会执行flag=1这一句,而else的语句就不会被执行了,x值就固定在119了,虽然每次循环i都会加1,但是x值不变了,只会再次执行flag=1,一直到最后i值大于100了退出循环,这时i=101,但是x值仍然是119,所以不会有700的值出现。
- if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5): #在i=17之前,x不符合条件,所以执行else增加x值,17后,x=119,每次循环都会符合条件
- flag = 1
- else: #i小于17之前一直执行这一句,最终x=7*17=119后,由于119符合上面的条件,所以else将不再执行
- x = 7 * (i+1)
复制代码
标答既繁琐不易理解,而且浪费效率,找出答案后还要执行无谓的循环,不如改成这样:
- x = 7
- i = 1
- while True:
- if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
- break
- x = 7 * (i+1)
- i += 1
- print('阶梯数是:', x)
复制代码
或者用for循环更高效:
- for x in range(7,int(input('请输入需要查找阶梯数的范围:')),7):
- print('%d\n' % x if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) else '', end='')
复制代码
|
|