鱼C论坛

 找回密码
 立即注册
查看: 4010|回复: 8

[已解决]第6讲作业中的爱因斯坦阶梯问题

[复制链接]
发表于 2017-5-25 20:49:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 crystal2314 于 2017-5-25 22:09 编辑

大家好,关于第六讲作业,有三个问题没搞明白:
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('在程序限定的范围内找不到答案!')

问题一:答案中的while条件是最多可以循环计算100次的,如果这100次计算中,有不止一个数能满足要求的话,flag不就不止一次被赋值为1了吗?是不是就只有最后计算出来的那个满足要求的数字能被输出?


另外两个问题是我自己写的两个版本的答案:
i = 1
x = 7
while i <= 999:
    if (x%2 == 1) and (x%3 == 2) and(x%5 == 4) and (x%6==5):
        print(x)
        i +=1
        x += 1
    else:
        i +=1
        x += 1
这是版本一
问题二:不知道为什么这个代码跑出来最前面的两个结果是59,89,而真正的答案119却排在第三位?

版本二:
i = 1
x = 7
while i <= 999:
    if (x%2 == 1) and (x%3 == 2) and(x%5 == 4) and (x%6==5):
        print(x)
        i +=1
        x += 7
    else:
        i +=1
        x += 7

问题三:版本二里面,我只是把版本一中的 x+=1 都改成 x+=7,但是出来的结果却完全不一样了,这是怎么回事啊?
最佳答案
2017-5-25 22:19:59
问题一:只有第一个满足的数会输出。
  1. if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  2.     flag = 1
  3. else:
  4.     x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
复制代码

看这块,当第一次满足要求的数出现时(119),flag置1,且不再执行else中的数,也就是说,下一次循环的时候,x还是119,直到循环结束。

问题二:if的判断有问题,少了对7的判断,改成下面这样
  1. if (x%2 == 1) and (x%3 == 2) and(x%5 == 4) and (x%6==5) and (x%7==0):
复制代码


问题三:这种方法没问题呀,为什么说答案是错的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-25 21:51:19 | 显示全部楼层
x的值必须是7的倍数。因此你版本里面x += 1   例如7+1 就是8  不符合题目要求了!

其实这个题目还有一个更简单的办法:
  1. i = 1
  2. while i <1000:
  3.     if i%2== 1 and i%3 ==2 and i%5 ==4 and i%6 ==5 and i%7 ==0:
  4.         print(i)
  5.         break
  6.     else:
  7.         i+=1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 22:10:59 | 显示全部楼层
yongxi 发表于 2017-5-25 21:51
x的值必须是7的倍数。因此你版本里面x += 1   例如7+1 就是8  不符合题目要求了!

其实这个题目还有一个 ...

哦,我懂了。那第一个问题是怎么回事呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 22:19:59 | 显示全部楼层    本楼为最佳答案   
问题一:只有第一个满足的数会输出。
  1. if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  2.     flag = 1
  3. else:
  4.     x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
复制代码

看这块,当第一次满足要求的数出现时(119),flag置1,且不再执行else中的数,也就是说,下一次循环的时候,x还是119,直到循环结束。

问题二:if的判断有问题,少了对7的判断,改成下面这样
  1. if (x%2 == 1) and (x%3 == 2) and(x%5 == 4) and (x%6==5) and (x%7==0):
复制代码


问题三:这种方法没问题呀,为什么说答案是错的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 22:28:59 | 显示全部楼层
crystal2314 发表于 2017-5-25 22:10
哦,我懂了。那第一个问题是怎么回事呢?


第一问题看楼上,正解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 22:33:04 | 显示全部楼层
shuofxz 发表于 2017-5-25 22:19
问题一:只有第一个满足的数会输出。

看这块,当第一次满足要求的数出现时(119),flag置1,且不再执行 ...

我刚刚又检查了一遍,因为我在前面还写了另一个问题的答案,结果第一个数119跟着上面那个程序的结果在同一行输出了,之前没有看到……囧
谢谢版主哦,第一个问题总算搞明白了,之前想了好久了,感觉自己看代码时还是不够细心啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 22:37:46 | 显示全部楼层
yongxi 发表于 2017-5-25 22:28
第一问题看楼上,正解。

嗯,我看到啦。也谢谢你呀~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 22:11:20 | 显示全部楼层
如何求出这个问题的其他解,例如539,959
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-2 18:16:10 | 显示全部楼层
level = 7
while (level%2==1 and level%3==2 and level%5==4 and level%6==5 and level%7==0) is False:
    level += 1
print(level)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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