鱼C论坛

 找回密码
 立即注册
查看: 3955|回复: 6

课后练习的爱因斯坦阶梯问题!

[复制链接]
发表于 2017-12-27 22:08:58 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
新手...看这个答案,不知道每一步的意思和作用。
更不用说做题了,这个看起来有点懵。
求解!非常感谢!
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
1. x = 7
2. i = 1
3. flag = 0
4.  
5. while i <= 100:
6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
7.         flag = 1
8.     else:
9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
10.     i += 1
11.  
12. if flag == 1:
13.     print('阶梯数是:', x)
14. else:
15.     print('在程序限定的范围内找不到答案!')
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-20 10:53:35 | 显示全部楼层
笨方法
x=1
while x<1000:
    if x%2==1 and x%3==2 and x%5==4 and x%6==5 and x%7==0:
        print(x)
        break
    else:
        x=x+1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-6-20 09:30:01 | 显示全部楼层
lzpragon 发表于 2017-12-28 11:55
我也刚学,因为我觉得那个答案只能显示一个数字,我就想能不能做个列表都显示,出来,如下。但结果却不如人 ...

这样打印出来是个列表:
x = 7  
i = 1                                      
y=[]                              

while i <= 100:                       
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):           
         y.append(x)
    x = 7 * (i+1)
    i += 1  

print(y)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-20 09:27:24 | 显示全部楼层
lzpragon 发表于 2017-12-28 11:55
我也刚学,因为我觉得那个答案只能显示一个数字,我就想能不能做个列表都显示,出来,如下。但结果却不如人 ...

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
         print('阶梯数是:', x)
    x = 7 * (i+1)
    i += 1  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-28 20:27:26 | 显示全部楼层
lzpragon 发表于 2017-12-28 11:55
我也刚学,因为我觉得那个答案只能显示一个数字,我就想能不能做个列表都显示,出来,如下。但结果却不如人 ...

因为 x = 119 的时候,不管 i 怎么加,程序都不会运行到 else语句,一直运行的是 if 语句,所以 x 就一直为 119。你这个 while 循环 i <=20,只能找到一个。我的是和原题一样的范围,代码如下
  1. x = 7  
  2. i = 1                                                                    
  3. y = []  
  4. while i <= 100:                       
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):           
  6.          y.append(x)
  7.     x = 7 * (i+1)
  8.     i += 1  
  9.   
  10. if y != []:                                          
  11.     print('阶梯数是:', y)
  12. else:
  13.     print('在程序限定的范围内找不到答案!')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-28 11:55:24 | 显示全部楼层
我也刚学,因为我觉得那个答案只能显示一个数字,我就想能不能做个列表都显示,出来,如下。但结果却不如人意啊。

x = 7  
i = 1                                      
flag = 0                                 
y = []  
while i <= 20:                       
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):           
         flag = 1
         y.append(x)
    else:
         x = 7 * (i+1)
    i += 1  
  
if flag == 1:                                          
    print('阶梯数是:', y)
else:
    print('在程序限定的范围内找不到答案!')

-------------------------------------------------------------------------------------------------

运行后显示如下,为什么会显示有4个一样数字的列表呢?

==
阶梯数是: [119, 119, 119, 119]
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-28 09:00:22 | 显示全部楼层
算法思路:
因为结果肯定是7的倍数
所以用 i 作为倍数,循环从1到100,其实就是循环考察7,14,21,...,700这些数中满足条件的值
条件就是(x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5)
这句的意思就是“若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 09:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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