【Python新手求助】爱因斯坦的难题
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('在程序限定的范围内找不到答案!')
做这题的时候感觉根本没有思路,应该怎么去理解它? 就是按照题目给定的条件写。
“若每步上 2 阶,最后剩 1 阶” 就表示阶梯数除以 2 的余数是 1;
“若每步上 3 阶,最后剩 2 阶” 就表示阶梯数除以 3 的余数是 2;
“若每步上 5 阶,最后剩 4 阶” 就表示阶梯数除以 5 的余数是 4。
……
这样就比较好理解。
小甲鱼老师的答案比较晦涩难懂,这样就比较易懂了:
x = 7
while x <= 700:
if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5):
print('阶梯数是:', x)
break
x += 7 zltzlt 发表于 2020-2-5 16:29
就是按照题目给定的条件写。
“若每步上 2 阶,最后剩 1 阶” 就表示阶梯数除以 2 的余数是 1;
x 为什么要加 7 ?这样写好像也行:
x = 1
while x <= 700:
if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
print('阶梯数是:', x)
break
x += 1
else:
print('在程序限定的范围内找不到答案!') 一个账号 发表于 2020-2-5 16:57
x 为什么要加 7 ?这样写好像也行:
x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7 zltzlt 发表于 2020-2-5 16:58
x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7
题目没说啊 一个账号 发表于 2020-2-5 17:33
题目没说啊
只有每步上 7 阶,最后刚好一阶也不剩。 zltzlt 发表于 2020-2-5 17:33
只有每步上 7 阶,最后刚好一阶也不剩。
谢谢 zltzlt 发表于 2020-2-5 17:33
只有每步上 7 阶,最后刚好一阶也不剩。
这样更好:
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)
x += 6 一个账号 发表于 2020-2-5 17:35
这样更好:
不知道楼主有没有学到 for 循环。 一个账号 发表于 2020-2-5 17:35
这样更好:
还不如这样效率高:
for x in range(0, 700, 7):
if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
print('阶梯数是:', x)
break # 题目只要求找第一个阶梯数 zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。
不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用 一个账号 发表于 2020-2-5 17:37
不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用
{:10_277:} zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。
还没有,现在学到第七课 lzymm1 发表于 2020-2-5 19:49
还没有,现在学到第七课
while 循环应该学了吧。 zltzlt 发表于 2020-2-5 16:29
就是按照题目给定的条件写。
“若每步上 2 阶,最后剩 1 阶” 就表示阶梯数除以 2 的余数是 1;
为什么是while x <= 700? lzymm1 发表于 2020-2-5 20:14
为什么是while x
设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。 zltzlt 发表于 2020-2-5 20:15
设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。
如果不设定范围呢? lzymm1 发表于 2020-2-5 20:17
如果不设定范围呢?
不设定范围就是 while True。由于找到第一个阶梯数就退出了,所以不设定范围也没问题。 zltzlt 发表于 2020-2-5 19:59
while 循环应该学了吧。
学了 zltzlt 发表于 2020-2-5 20:18
不设定范围就是 while True。由于找到第一个阶梯数就退出了,所以不设定范围也没问题。
懂了
页:
[1]
2