Aber 发表于 2020-5-23 17:00:51

006课后作业爱因斯坦求阶梯数量这道题看不明白,求大牛指点一下。

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

#爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
#答案是119

我想请问这段代码开头x=7 i=1 flag=0怎么理解,还有 while i <= 100:为什么i要定义在100以内,i是什么含义 。if flag == 1时打印阶梯数量,不应该是0吗? 后面对i一直在进行+1操作,那刚开始对i=1的定义是什么意思呀。新人完全不能理解,求大牛解释一下,谢谢谢谢{:5_102:}

wp231957 发表于 2020-5-23 17:12:58

whilei<100   是因为作者知道在这个范围内,可以取到答案,实际上,这个问题不止一个答案,你可以whilei<10000试一下
i=1   一个是赋初值,另一个就是让程序在7 14 21 28      里面筛选,也是为了提高效率

Aber 发表于 2020-5-23 17:15:34

wp231957 发表于 2020-5-23 17:12
whilei

那flag跟x的初值赋予的意义是什么呀?赋值我好像看着乱糟糟的

qiuyouzhi 发表于 2020-5-23 17:15:57

1,你搞成1000,10000都行。
2,就是一个变量,让循环可以结束。
3,flag 设置为1代表找到了答案,为0就是没有。
4,你得先定义一个东西,才能对它进行操作吧

Aber 发表于 2020-5-23 17:19:05

qiuyouzhi 发表于 2020-5-23 17:15
1,你搞成1000,10000都行。
2,就是一个变量,让循环可以结束。
3,flag 设置为1代表找到了答案,为0就是 ...

{:5_100:}我以为flag是往前走一步楼梯的意思,原来是True跟False的意思 你这么一说我好像有点眉目了,谢谢,我再看看

wp231957 发表于 2020-5-23 17:19:28

Aber 发表于 2020-5-23 17:15
那flag跟x的初值赋予的意义是什么呀?赋值我好像看着乱糟糟的

flag就是设置一个标记,程序中经常用到的一个手法,x=7不是说了吗,在7的倍数里面筛选数据,节省循环次数

这个样板代码,写的一般,如果看不懂,你可以自己尝试写一下,按照自己的思维去写,不要把思维固定在别人的脑袋里

qiuyouzhi 发表于 2020-5-23 17:23:14

Aber 发表于 2020-5-23 17:19
我以为flag是往前走一步楼梯的意思,原来是True跟False的意思 你这么一说我好像有点眉目了,谢 ...

这个flag你可以理解为一个旗子,一开始是放倒的,
如果找到答案了,就把它立起来,否则就一直放倒。
最后,判断这个旗子是否立起来,如果立起来了,就打印答案
否则就不打印。

Aber 发表于 2020-5-23 17:29:15

wp231957 发表于 2020-5-23 17:19
flag就是设置一个标记,程序中经常用到的一个手法,x=7不是说了吗,在7的倍数里面筛选数据,节省循环次数 ...



这样理解正确吗?我现在纠结的不是题目,是代码的表达含义,我看的有点含糊不清,想弄清楚,麻烦您了

wp231957 发表于 2020-5-23 17:32:00

Aber 发表于 2020-5-23 17:29
这样理解正确吗?我现在纠结的不是题目,是代码的表达含义,我看的有点含糊不清,想弄清楚,麻烦您了

所以说,编程应该有自己的思维
你应该考虑的是,如果是我,我应该怎么写

永恒的蓝色梦想 发表于 2020-5-23 17:53:52

x=7 i=1 flag=0怎么理解设个初始值,防止报 NameError为什么i要定义在100以内,i是什么含义你愿意定义在10000000以内也一样,能找到答案就行。i 是变量。if flag == 1时打印阶梯数量,不应该是0吗0是没找到后面对i一直在进行+1操作,那刚开始对i=1的定义是什么意思呀。我不知道你想问什么

Aber 发表于 2020-5-23 18:15:47

永恒的蓝色梦想 发表于 2020-5-23 17:53
设个初始值,防止报 NameError你愿意定义在10000000以内也一样,能找到答案就行。i 是变量。0是没找到我不 ...

麻烦你看看楼上我发的图,这样理解合理吗

永恒的蓝色梦想 发表于 2020-5-23 18:18:44

Aber 发表于 2020-5-23 18:15
麻烦你看看楼上我发的图,这样理解合理吗

else 和 if 相反。

僵小渔 发表于 2020-5-23 18:19:19

1.i因为阶梯数肯定是7的某个整数倍,i递增用来逐个判断某个7的整数倍是否满足第一个条件

2.flag为用户自定义,用来判断此时的阶梯数是否符合所有的条件,若符合,则flag = 1.

3.关于i<=100,是设置的阶梯可能满足的范围,即阶梯数在7~700之间是否有符合所有条件,若无符合,则输出该范围找不到答案。
页: [1]
查看完整版本: 006课后作业爱因斯坦求阶梯数量这道题看不明白,求大牛指点一下。