鱼C论坛

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

[已解决]爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若...

[复制链接]
发表于 2021-3-8 17:39:39 | 显示全部楼层 |阅读模式

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

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

x
第六课课后习题,

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('在程序限定的范围内找不到答案!')
input()


请问flag 在这里是什么意思,            可以不要 i <= 100吗
最佳答案
2021-3-8 18:22:14
flag只是一个标记,用来记录你是否找到了你想要的。
不要也可以,例如可以在if条件成立后将flag直接换成打印这个x,一样可以达到目的。
而i<=100
则是框定了一个找寻范围
无论用那种方式只要达到想要的结果就可以
范围这里就可以和前一楼所举例一样改变成为一个for循环
要解决的问题是一样的,只是到达的方法略有不同而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-8 17:47:11 From FishC Mobile | 显示全部楼层
flag==1意思就是代表符合题意的阶梯数
可以不要 i <= 100吗
这个不是很明白你的意思
那你有别的代替方法吗

评分

参与人数 1荣誉 +5 收起 理由
abc200603 + 5

查看全部评分

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

使用道具 举报

发表于 2021-3-8 17:51:54 From FishC Mobile | 显示全部楼层
本帖最后由 小伤口 于 2021-3-8 17:53 编辑

之所以要用flag
因为如果你直接打印符合题意的x话
因为在while循环里所以会一直打印
flag就起到一个中间商的作用让他在while外打印
这样就不会重复了

因为答案不止一个所以要i<100取一个范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 17:53:44 | 显示全部楼层
小伤口 发表于 2021-3-8 17:47
flag==1意思就是代表符合题意的阶梯数
可以不要 i

怎么说呢,理论上是可行的
x = 7
i = 1
flag = 0

while i:
    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)
        break

input()

但是吧,问题就是,万一不存在这个情况,就会一直去运算,进入死循环,直到找到了结果

限定 i<= 100 只是为了避免死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 17:56:02 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-3-8 17:53
怎么说呢,理论上是可行的



我没运行,我也不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 17:59:24 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-3-8 17:53
怎么说呢,理论上是可行的



所以还是不能删呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 18:01:46 | 显示全部楼层
小伤口 发表于 2021-3-8 17:59
所以还是不能删呀

是,但是他说的是删掉 while i <= 100

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

使用道具 举报

发表于 2021-3-8 18:08:14 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-3-8 18:01
是,但是他说的是删掉 while i

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

使用道具 举报

发表于 2021-3-8 18:11:44 From FishC Mobile | 显示全部楼层
原来题目说的是最少呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 18:13:33 | 显示全部楼层
       这样写是不是好理解一些
flag = 0
for x in range(7 , 700 , 7):
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        print('阶梯数是:' , x)
        flag += 1
if flag == 0:
    print('在程序限定的范围内找不到答案!')
input()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 18:22:14 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
flag只是一个标记,用来记录你是否找到了你想要的。
不要也可以,例如可以在if条件成立后将flag直接换成打印这个x,一样可以达到目的。
而i<=100
则是框定了一个找寻范围
无论用那种方式只要达到想要的结果就可以
范围这里就可以和前一楼所举例一样改变成为一个for循环
要解决的问题是一样的,只是到达的方法略有不同而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-7 11:35:16 | 显示全部楼层
本帖最后由 hit396 于 2021-12-7 11:37 编辑
yuedong 发表于 2021-3-8 18:22
flag只是一个标记,用来记录你是否找到了你想要的。
不要也可以,例如可以在if条件成立后将flag直接换成打 ...


小白再次追问:
x = 7是什么意思?在程序里有什么作用?试着改了很多数,0也好,超级大的数也好,对运行结果没什么影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 10:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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