lu315702820 发表于 2024-8-1 18:04:49

第11讲课后习题

大家好,关于下面的这个问题,我自己写了代码,但是运行的时候得不到结果,有没有大神可以帮忙解答一下原因?写的非常简略(勿喷谢谢)
有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶也不剩。求解该阶梯的最终数量?
step = 7
i = 1
while step >= 7:
    if step % 7 == 0 and step % 6 == 5 and \
       step % 5 == 4 and step % 3 == 2 and \
       step % 2 == 1:
      print(step)
      break
    else:
      i = i + 1
      step = step * i


某一个“天” 发表于 2024-8-1 18:14:14

球最佳~
step = 7
i = 1
while step >= 7:
    if step % 6 == 5 and (step % 5 == 4) and (step % 3 == 2) and (step % 2 == 1):
      print(step)
      break
    else:
      i += 1
      step = 7 * i

Twilight6 发表于 2024-8-1 18:14:15

最后一行代码有问题,你 step = step * i下次循环开始都是用上个循环 step * i 后的值了,而不是以 7 的倍数增加

比如第一次循环: i = 2step = 7 * 2 = 14 ,此时你将 step = 14 了

那么第二次循环: i = 3step = 14 * 3 = 42中间都跳过其它 7 的倍数了

所以这个数增长的非常快,越往后,漏 7 的倍数越多,所以你应该将最后一行代码修改成 step = i * 7 即可
step = 7
i = 1
while step >= 7:
    if step % 7 == 0 and step % 6 == 5 and \
       step % 5 == 4 and step % 3 == 2 and \
       step % 2 == 1:
      print(step)
      break
    else:
      i = i + 1
      step = i * 7

某一个“天” 发表于 2024-8-1 18:14:59

Twilight6 发表于 2024-8-1 18:14
最后一行代码有问题,你 step = step * i下次循环开始都是用上个循环 step * i 后的值了,而不是以 7 的 ...

比你快一秒{:10_256:}

wp231957 发表于 2024-8-1 18:15:59

这个问题不需要那么麻烦,这就是一个穷举的问题,不需要那个什么step变量
直接就无限自增1   直到找到第一个数据为止
那个else语句也没必要存在

某一个“天” 发表于 2024-8-1 18:16:09

另外没必要判断step % 7 == 0{:10_256:}

某一个“天” 发表于 2024-8-1 18:28:49

wp231957 发表于 2024-8-1 18:15
这个问题不需要那么麻烦,这就是一个穷举的问题,不需要那个什么step变量
直接就无限自增1   直到找到第一 ...

效率{:10_256:}

wp231957 发表于 2024-8-1 18:36:36

某一个“天” 发表于 2024-8-1 18:28
效率

现在的电脑运行1000次和7000次,肉眼能感觉到吗,这个题目小甲鱼大概率是针对新手村的,对于新手来说要考虑语法还要考虑算法,有些头大

某一个“天” 发表于 2024-8-1 18:37:12

wp231957 发表于 2024-8-1 18:36
现在的电脑运行1000次和7000次,肉眼能感觉到吗,这个题目小甲鱼大概率是针对新手村的,对于新手来说要考 ...

好{:10_254:}

wp231957 发表于 2024-8-1 18:55:33

某一个“天” 发表于 2024-8-1 18:37


这题用数学算法算不算有效代码
根据23456的余数可知,此数等于60的倍数减1
所以我们在循环中判断60*x-1是否模7等于0
就可以了

三体人的智子 发表于 2024-8-1 19:07:09

建议画流程图,把编程问题想成数学问题,再将数学思路转化成python代码。
我是这么做的,代码ta们都替我打了{:10_282:}

三体人的智子 发表于 2024-8-1 19:08:23

这种题个人认为用数学方法还是蛮不错的{:10_256:}

Twilight6 发表于 2024-8-1 20:33:36

某一个“天” 发表于 2024-8-1 18:14
比你快一秒

哈哈~ 还是你手速快吼~~~

stumblemodel 发表于 2024-8-1 21:55:55

我的评价是:
一个数,除以2余1,除以3余2,除以5余4,除以6余5,被7整除
简单的小学奥数

人造人 发表于 2024-8-2 00:33:38

sh-5.2$ cat main.py
#!/usr/bin/env python
#coding=utf-8

from itertools import count

for i in count(1):
    if i % 2 != 1: continue
    if i % 3 != 2: continue
    if i % 5 != 4: continue
    if i % 6 != 5: continue
    if i % 7 != 0: continue
    print(i)
    break
sh-5.2$ ./main.py
119
sh-5.2$
页: [1]
查看完整版本: 第11讲课后习题