userlin 发表于 2021-8-27 14:15:05

课后作业第006将

求助各位大神,课后作业第006讲常用操作符最后一题

2. 爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
(小甲鱼温馨提示:步子太大真的容易扯着蛋~~~)

题目:请编程求解该阶梯至少有多少阶?

这道题的答案是:

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


想问一下,为什么一开始赋值x=7;i=1;flag又是什么,为什么赋值为0?
整题答案看了蒙圈,这应该要数学基础吧?看不懂!

jackz007 发表于 2021-8-27 14:26:22

      简单问题被复杂化了,看看下面的等效代码,是否还有困难?
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)
         break
else:
   print('在程序限定的范围内找不到答案!')

fish_nian 发表于 2021-8-27 16:24:49

x 初始化等于7是因为条件中需要满足被7整除,另外每次需要作为的判断条件是7的整数倍,那么就那7乘以1,2,3,每次判断不满足则 i + 1,flag初始为多少都无所谓哦,主要是后面判断flag = 1则输出结果

hhjdsd 发表于 2021-8-27 20:56:40

x为台阶数,由于“只有每步上七阶,最后刚好一阶也不剩”,所以x必须为7的倍数,所以从7开始。
i算是给程序上个保险,以防一直运算下去,后面老甲鱼也有相应代码“print("在程序限定范围内找不到答案")”。
flag算是为了告诉计算机,这个数也就是此时的x是我要的答案。
>>> while 1:
        print("12")
        break

12
>>> while 0:
        print("12")
        break

>>>
就像上面代码一样,除了0以外的数字都被判定为True,0则为False

jhq999 发表于 2021-8-27 21:57:15


>>> i=7
>>> while ((1!=i%2)or(2!=i%3)or(4!=i%5)or(0!=i%7)):
        i=i+1

       
>>> print(i)
119
>>>

userlin 发表于 2021-9-7 11:09:09

jackz007 发表于 2021-8-27 14:26
简单问题被复杂化了,看看下面的等效代码,是否还有困难?

感谢大佬{:10_297:}

傻眼貓咪 发表于 2021-9-7 12:02:25

本帖最后由 傻眼貓咪 于 2021-9-7 12:05 编辑

想知道樓主是從哪裡得到這代碼的?最近很多人問同樣問題,代碼一模一樣,明顯代碼不優啊,我已經幫很多人解題了

代碼簡化:
i = 1
while True:
    if (i%2 == 1) and (i%3 == 2) and (i%5 == 4) and (i%6 == 5) and (i%7 == 0):
      print(i)
      break
    i += 1

通常不會有人已經知道要迴圈多少次數了還在用 while 的,既然已經知道次數,應該用 for 才正確,但這題用 while 沒有錯,只是不能局限 100次, 應該達到某條件就退出才是

userlin 发表于 2021-9-7 13:49:36

傻眼貓咪 发表于 2021-9-7 12:02
想知道樓主是從哪裡得到這代碼的?最近很多人問同樣問題,代碼一模一樣,明顯代碼不優啊,我已經幫很多人解 ...

谢谢大佬,我是查看了课后习题的答案的,因为第一次接触Python,纯小白哈哈,所以看起来晕了点,也可能是我逻辑不行
页: [1]
查看完整版本: 课后作业第006将