鱼C论坛

 找回密码
 立即注册
查看: 4916|回复: 4

[已解决]python课后题疑问

[复制链接]
发表于 2017-3-2 15:26:29 | 显示全部楼层 |阅读模式
2鱼币
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('在程序限定的范围内找不到答案!')
这是爱因斯坦难题小甲鱼给的程序,大神给详细讲解下程序的思路!!!
最佳答案
2017-3-2 15:26:30
小甲鱼老师给出的算法很棒,大大缩短了程序的运算时间。我先谈下自己对这道题的理解(见下面的代码):
“ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):”等效于 “有一个长台阶,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;若每步上7阶,最后不剩。”这个if是核心语句。
小甲鱼老师的算法比我的好:(1)根据题意,仅计算7的倍数  (2) 设定了运算范围,避免了可能的bug
刚开始学习编程,估计说的也不是太清楚,欢迎交流。如果下面的代码思路看懂了,再看小甲鱼老师的代码,就会容易理解思路了。
x = 1
flag = 0
while flag == 0:
    if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
        flag = 1
    else:
        x = x + 1
print("台阶数是",x)

最佳答案

查看完整内容

小甲鱼老师给出的算法很棒,大大缩短了程序的运算时间。我先谈下自己对这道题的理解(见下面的代码): “ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):”等效于 “有一个长台阶,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;若每步上7阶,最后不剩。”这个if是核心语句。 小甲鱼老师的算法比我的好:(1)根据题意,仅计算7 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-2 15:26:30 | 显示全部楼层    本楼为最佳答案   
小甲鱼老师给出的算法很棒,大大缩短了程序的运算时间。我先谈下自己对这道题的理解(见下面的代码):
“ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):”等效于 “有一个长台阶,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;若每步上7阶,最后不剩。”这个if是核心语句。
小甲鱼老师的算法比我的好:(1)根据题意,仅计算7的倍数  (2) 设定了运算范围,避免了可能的bug
刚开始学习编程,估计说的也不是太清楚,欢迎交流。如果下面的代码思路看懂了,再看小甲鱼老师的代码,就会容易理解思路了。
x = 1
flag = 0
while flag == 0:
    if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
        flag = 1
    else:
        x = x + 1
print("台阶数是",x)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-3 20:38:44 | 显示全部楼层
题中说一次跨7阶就没有多余的,为了提高编码的效率,就可以直接设步数为7i,这个编程的i就是由1开始,1、7、14、21....循环满足其跨两节多1,跨3节多2等等等,当步数7i满足那个等式,则flag表示1跳出来总的阶数,否则继续往上加来试,效率比以下由1、2、3、4、5、。。。方式高
print('=======evaluate the steps=======')

steps = 0
while not ((steps % 2 == 1) and (steps % 3 == 2) \
      and (steps % 5 == 4) and (steps % 6 == 5)\
      and (steps % 7 == 0)):
    steps += 1
#print('the whole steps sums up to',end='')
#print(steps)
print('the whole steps sums up to',steps)

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-7 15:59:40 | 显示全部楼层
爱上Q的球 发表于 2017-3-3 20:38
题中说一次跨7阶就没有多余的,为了提高编码的效率,就可以直接设步数为7i,这个编程的i就是由1开始,1、7 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-7 16:00:48 | 显示全部楼层
thexiosi 发表于 2017-3-7 14:37
小甲鱼老师给出的算法很棒,大大缩短了程序的运算时间。我先谈下自己对这道题的理解(见下面的代码):
“ ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 21:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表