第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
球最佳~
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 最后一行代码有问题,你 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 Twilight6 发表于 2024-8-1 18:14
最后一行代码有问题,你 step = step * i下次循环开始都是用上个循环 step * i 后的值了,而不是以 7 的 ...
比你快一秒{:10_256:} 这个问题不需要那么麻烦,这就是一个穷举的问题,不需要那个什么step变量
直接就无限自增1 直到找到第一个数据为止
那个else语句也没必要存在 另外没必要判断step % 7 == 0{:10_256:} wp231957 发表于 2024-8-1 18:15
这个问题不需要那么麻烦,这就是一个穷举的问题,不需要那个什么step变量
直接就无限自增1 直到找到第一 ...
效率{:10_256:} 某一个“天” 发表于 2024-8-1 18:28
效率
现在的电脑运行1000次和7000次,肉眼能感觉到吗,这个题目小甲鱼大概率是针对新手村的,对于新手来说要考虑语法还要考虑算法,有些头大 wp231957 发表于 2024-8-1 18:36
现在的电脑运行1000次和7000次,肉眼能感觉到吗,这个题目小甲鱼大概率是针对新手村的,对于新手来说要考 ...
好{:10_254:} 某一个“天” 发表于 2024-8-1 18:37
好
这题用数学算法算不算有效代码
根据23456的余数可知,此数等于60的倍数减1
所以我们在循环中判断60*x-1是否模7等于0
就可以了 建议画流程图,把编程问题想成数学问题,再将数学思路转化成python代码。
我是这么做的,代码ta们都替我打了{:10_282:} 这种题个人认为用数学方法还是蛮不错的{:10_256:} 某一个“天” 发表于 2024-8-1 18:14
比你快一秒
哈哈~ 还是你手速快吼~~~ 我的评价是:
一个数,除以2余1,除以3余2,除以5余4,除以6余5,被7整除
简单的小学奥数 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]