鱼C论坛

 找回密码
 立即注册
查看: 2147|回复: 10

[已解决]爱因斯坦的阶梯数问题

[复制链接]
发表于 2018-6-29 05:57:26 | 显示全部楼层 |阅读模式

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

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

x
长阶梯,每跨2阶余1阶,每跨3阶余2阶,每跨5阶余4阶,每跨6阶余5阶,每跨7阶即刚好。试求该阶梯数。

小甲鱼的答案是:
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 100:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  6.         flag = 1
  7.     else:
  8.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  9.     i += 1

  10. if flag == 1:
  11.     print('阶梯数是:', x)
  12. else:
  13.     print('在程序限定的范围内找不到答案!')
复制代码

求出来,1000以内的阶梯数仅为119。
我的做法是:
  1. for x in range(0,1000):
  2.         if (x%2 == 1) and (x%3 == 2) and (x%5 = =4) and (x%6 == 5) and (x%7 == 0):
  3.             print("该阶梯级数是:",x)
复制代码

求出来,1000以内的阶梯数是:119,329,539,749,959;--我也验证过,貌似都对。。

问题是哪里出错了????
最佳答案
2018-6-30 16:29:05
老笨啊 发表于 2018-6-30 05:41
哦,你意思是这个小甲鱼的代码设置时,while语句下的循环执行时,刚开始都是执行else语句,而一旦条件符 ...

1,当执行到x=119时并没有跳出循环,而是继续执行,直到 i = 100;
2,当x=119时,执行 if 语句,一直是 true,所以就不会再执行 else 语句,x 的值也就不会再变化;
3,所以说,当 x = 119 时,并没有跳出while循环,而是不再给 x 赋值,执行结果也就只有一个 119 了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-29 07:00:59 | 显示全部楼层
没错,更大的范围有更多的答案。只不过,题目是有现实意义的,选个百来级的阶梯做答案比较合适。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-29 07:50:13 From FishC Mobile | 显示全部楼层
前一段代码要么执行if后面的语句,要么执行else后面的语句。当if被执行后,就不会执行else,所以接下来x的值不会变,此时x=119,所以也就只会打印出一个值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-29 09:18:01 | 显示全部楼层
2018-06-29_091340.png
他的代码错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-29 16:14:11 | 显示全部楼层
题目是要求最小的吧。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-30 05:34:19 | 显示全部楼层
凌九霄 发表于 2018-6-29 07:00
没错,更大的范围有更多的答案。只不过,题目是有现实意义的,选个百来级的阶梯做答案比较合适。

我试过小甲鱼的代码,把i的范围改成1000,输出仍旧只有一个119.。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-30 05:41:40 | 显示全部楼层
龟龟314 发表于 2018-6-29 07:50
前一段代码要么执行if后面的语句,要么执行else后面的语句。当if被执行后,就不会执行else,所以接下来x的 ...

哦,你意思是这个小甲鱼的代码设置时,while语句下的循环执行时,刚开始都是执行else语句,而一旦条件符合,执行到if语句,就停止循环,直接输出?
可是我没有看出来,它是如何跳出循环的?
有几个问题:
1. while语句中,i<=100,也就是x最大可以到707,而实际输出只有一个。。
2. 按照我的理解,该循环语句中,i应该会一直执行下去,直到100.。并不会因为计算出了第一个结果就跳出循环吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-30 16:29:05 | 显示全部楼层    本楼为最佳答案   
老笨啊 发表于 2018-6-30 05:41
哦,你意思是这个小甲鱼的代码设置时,while语句下的循环执行时,刚开始都是执行else语句,而一旦条件符 ...

1,当执行到x=119时并没有跳出循环,而是继续执行,直到 i = 100;
2,当x=119时,执行 if 语句,一直是 true,所以就不会再执行 else 语句,x 的值也就不会再变化;
3,所以说,当 x = 119 时,并没有跳出while循环,而是不再给 x 赋值,执行结果也就只有一个 119 了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-4 18:22:32 | 显示全部楼层
老笨啊 发表于 2018-6-30 05:41
哦,你意思是这个小甲鱼的代码设置时,while语句下的循环执行时,刚开始都是执行else语句,而一旦条件符 ...

会的呀。
当没有找到x,也就是if语句不成立的时候,执行else语句,i不断+1。
当i=17,有第一个x=119时,使条件成立flag==1,if语句成立,不再执行else,i不继续增加了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-9 19:56:18 | 显示全部楼层
szweifj 发表于 2018-6-30 16:29
1,当执行到x=119时并没有跳出循环,而是继续执行,直到 i = 100;
2,当x=119时,执行 if 语句,一直是 ...

同意8楼的说法,if作为while循环中的条件只是将i值增加,并没有改变X的值所以如果要返回1000以内的返回值应该做如下修改。
  1. x = 7

  2. i = 0

  3. flag = 0

  4. while i <= 100:

  5.     x = (i + 1) * 7

  6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 ==5):

  7.         flag =1

  8.         if flag == 1:

  9.             print('Number of stairs are: ',x)

  10.     i += 1
  11.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 15:40:30 | 显示全部楼层
可以再引入一个变量,让循环在输出一次之后停止。我试了一下这个貌似可以

x=1
i=0
while (x<1000)and(not i)and(i<1000):
    if(x%2==1) and (x%3==2) and (x%5==4) and (x%6==5) and (x%7==0):
        print(x)
        i=1+1
    else:
        x=x+1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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