鱼C论坛

 找回密码
 立即注册
查看: 3502|回复: 20

[已解决]【Python新手求助】爱因斯坦的难题

[复制链接]
发表于 2020-2-5 16:22:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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('在程序限定的范围内找不到答案!')
做这题的时候感觉根本没有思路,应该怎么去理解它?
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
爪爪同学 + 3 + 3 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 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('在程序限定的范围内找不到答案!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:58:50 | 显示全部楼层
一个账号 发表于 2020-2-5 16:57
x 为什么要加 7 ?这样写好像也行:

x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:33:15 | 显示全部楼层
zltzlt 发表于 2020-2-5 16:58
x 加 7 效率更高。根据题意,x 一定是 7 的整数倍,所以每次加 7

题目没说啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:33:45 | 显示全部楼层

只有每步上 7 阶,最后刚好一阶也不剩。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:34:34 | 显示全部楼层
zltzlt 发表于 2020-2-5 17:33
只有每步上 7 阶,最后刚好一阶也不剩。

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

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:36:09 | 显示全部楼层

不知道楼主有没有学到 for 循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:36:53 | 显示全部楼层

还不如这样效率高:
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    # 题目只要求找第一个阶梯数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:37:25 | 显示全部楼层
zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。


不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:38:28 | 显示全部楼层
一个账号 发表于 2020-2-5 17:37
不对不对,这样不行,我刚刚调试了一下,发现 x += 6 没用

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

使用道具 举报

 楼主| 发表于 2020-2-5 19:49:43 | 显示全部楼层
zltzlt 发表于 2020-2-5 17:36
不知道楼主有没有学到 for 循环。

还没有,现在学到第七课
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 19:59:44 | 显示全部楼层
lzymm1 发表于 2020-2-5 19:49
还没有,现在学到第七课

while 循环应该学了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 20:14:44 | 显示全部楼层
zltzlt 发表于 2020-2-5 16:29
就是按照题目给定的条件写。

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

为什么是while x <= 700?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 20:15:54 | 显示全部楼层

设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 20:17:02 | 显示全部楼层
zltzlt 发表于 2020-2-5 20:15
设定当 x 大于 700 时退出循环。也可以将 700 换成其他数字。

如果不设定范围呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 20:18:10 | 显示全部楼层
lzymm1 发表于 2020-2-5 20:17
如果不设定范围呢?

不设定范围就是 while True。由于找到第一个阶梯数就退出了,所以不设定范围也没问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 20:32:20 | 显示全部楼层
zltzlt 发表于 2020-2-5 19:59
while 循环应该学了吧。

学了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 23:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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