鱼C论坛

 找回密码
 立即注册
查看: 1257|回复: 11

[已解决]Python第六讲 爱因斯坦难题编程题

[复制链接]
发表于 2021-9-6 19:34:42 | 显示全部楼层 |阅读模式

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

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

x
第6行  执行到   if  flag=1  如果执行到这会直接跳到10行  if  flag ==1  这一行执行吗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('在程序限定的范围内找不到答案!')

最佳答案
2021-9-6 22:01:50
for 和 while 兩者真正用途:
for 當你知道該循環多少次
while 你只知道循環結束條件,但不知道循環多少次才會達到該條件

你的代碼明顯知道循環次數啊(就100次啊),為什麼要用 while?
應該用 for i in range(1, 101)

但是題目是用 while 沒有錯,只是不該局限 100次循環,而是達到某條件就退出

爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
明顯只知道條件,而根本不知道循環次數吧?
只是好奇為什麼你會預先知道 i = 100 以內會有答案?


正確寫法應該是:
  1. i = 1
  2. while True:
  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.     i += 1
复制代码


結果:
  1. 119
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-6 20:08:03 | 显示全部楼层
本帖最后由 白two 于 2021-9-6 20:10 编辑

不会,会把循环跑完,你要是想跳到后面,加一个 break 即可:
  1. x = 1
  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.         break
  8.     else:
  9.         x = 7 * (i + 1)  # 根据题意,x一定是7的整数倍,所以每次乘以7
  10.     i += 1
  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')

复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-6 20:24:38 | 显示全部楼层
好的,您好有个疑问:
这个原始程序跑出来是119,i=16,此时while循环下if条件成立,且满足循环条件,如果继续循环的话最后输出的结果是707。
我是这样想的,不知道哪出问题了。。请指教!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 20:49:58 From FishC Mobile | 显示全部楼层
Heart3 发表于 2021-9-6 20:24
好的,您好有个疑问:
这个原始程序跑出来是119,i=16,此时while循环下if条件成立,且满足循环条件,如果 ...

答案肯定不止一个啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 21:06:54 | 显示全部楼层
wp231957 发表于 2021-9-6 20:49
答案肯定不止一个啊

但是这个原始程序运行出来是只有119
不明白的是   当结束while循环的时候,x值等于707,结果为什么会是119呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 21:16:24 | 显示全部楼层
  1. if flag == 1 可以簡化為 if flag
  2. 1 就是 True (除了0 所有數字都是True)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 21:22:36 | 显示全部楼层

这个程序结果是119
运行时候,第六行 满足flag=1的时候,此时x=119就不会变化了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 21:40:57 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-6 21:44 编辑
Heart3 发表于 2021-9-6 21:22
这个程序结果是119
运行时候,第六行 满足flag=1的时候,此时x=119就不会变化了吗


满足flag=1的時候,你沒有叫它退出啊
除非 break,否則會繼續循環遍歷

  1. while 條件:
  2.     if 條件:
  3.         # 代碼沒有退出的意思,則繼續循環
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 21:52:16 | 显示全部楼层
那这个原始程序结果该是什么呢?    119是正确的吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 22:01:50 | 显示全部楼层    本楼为最佳答案   
for 和 while 兩者真正用途:
for 當你知道該循環多少次
while 你只知道循環結束條件,但不知道循環多少次才會達到該條件

你的代碼明顯知道循環次數啊(就100次啊),為什麼要用 while?
應該用 for i in range(1, 101)

但是題目是用 while 沒有錯,只是不該局限 100次循環,而是達到某條件就退出

爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
明顯只知道條件,而根本不知道循環次數吧?
只是好奇為什麼你會預先知道 i = 100 以內會有答案?


正確寫法應該是:
  1. i = 1
  2. while True:
  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.     i += 1
复制代码


結果:
  1. 119
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 22:04:46 | 显示全部楼层
Heart3 发表于 2021-9-6 21:52
那这个原始程序结果该是什么呢?    119是正确的吗

119 是正確的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 22:14:09 | 显示全部楼层
感谢&#128591;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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