lzymm1 发表于 2020-2-5 16:22:44

【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('在程序限定的范围内找不到答案!')
做这题的时候感觉根本没有思路,应该怎么去理解它?

zltzlt 发表于 2020-2-5 16:29:17

就是按照题目给定的条件写。

“若每步上 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

一个账号 发表于 2020-2-5 16:57:11

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('在程序限定的范围内找不到答案!')

zltzlt 发表于 2020-2-5 16:58:50

一个账号 发表于 2020-2-5 16:57
x 为什么要加 7 ?这样写好像也行:

x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7

一个账号 发表于 2020-2-5 17:33:15

zltzlt 发表于 2020-2-5 16:58
x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7

题目没说啊

zltzlt 发表于 2020-2-5 17:33:45

一个账号 发表于 2020-2-5 17:33
题目没说啊

只有每步上 7 阶,最后刚好一阶也不剩。

一个账号 发表于 2020-2-5 17:34:34

zltzlt 发表于 2020-2-5 17:33
只有每步上 7 阶,最后刚好一阶也不剩。

谢谢

一个账号 发表于 2020-2-5 17:35:37

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

zltzlt 发表于 2020-2-5 17:36:09

一个账号 发表于 2020-2-5 17:35
这样更好:

不知道楼主有没有学到 for 循环。

zltzlt 发表于 2020-2-5 17:36:53

一个账号 发表于 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    # 题目只要求找第一个阶梯数

一个账号 发表于 2020-2-5 17:37:25

zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。

不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用

zltzlt 发表于 2020-2-5 17:38:28

一个账号 发表于 2020-2-5 17:37
不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用

{:10_277:}

lzymm1 发表于 2020-2-5 19:49:43

zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。

还没有,现在学到第七课

zltzlt 发表于 2020-2-5 19:59:44

lzymm1 发表于 2020-2-5 19:49
还没有,现在学到第七课

while 循环应该学了吧。

lzymm1 发表于 2020-2-5 20:14:44

zltzlt 发表于 2020-2-5 16:29
就是按照题目给定的条件写。

“若每步上 2 阶,最后剩 1 阶” 就表示阶梯数除以 2 的余数是 1;


为什么是while x <= 700?

zltzlt 发表于 2020-2-5 20:15:54

lzymm1 发表于 2020-2-5 20:14
为什么是while x

设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。

lzymm1 发表于 2020-2-5 20:17:02

zltzlt 发表于 2020-2-5 20:15
设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。

如果不设定范围呢?

zltzlt 发表于 2020-2-5 20:18:10

lzymm1 发表于 2020-2-5 20:17
如果不设定范围呢?

不设定范围就是 while True。由于找到第一个阶梯数就退出了,所以不设定范围也没问题。

lzymm1 发表于 2020-2-5 20:32:20

zltzlt 发表于 2020-2-5 19:59
while 循环应该学了吧。

学了

lzymm1 发表于 2020-2-5 20:39:55

zltzlt 发表于 2020-2-5 20:18
不设定范围就是 while True。由于找到第一个阶梯数就退出了,所以不设定范围也没问题。

懂了
页: [1] 2
查看完整版本: 【Python新手求助】爱因斯坦的难题