李星彤 发表于 2026-7-12 18:12:14

爱因斯坦那个阶梯数那个题 我这样打为什么不对啊

steps = 7
i = 1
FIND = False
while i < 100:
    if steps * i % 2 == 1 and steps * i % 3 == 2 and steps * i % 5 == 4 and steps * i % 6 == 5 :
      FIND = True
      break
    else:
         FIND = False
    i = i + 1

if FIND == True:
         print('阶梯数是:', steps)
else:
         print('在运行程序范围内找不到答案')

FishC 发表于 2026-7-12 18:12:25

爱因斯坦那个阶梯数那个题 我这样打为什么不对啊

问题出在几个地方:

1. 没有检查除以7余数为0的条件
题目要求每步上7阶正好走完,也就是阶梯数 % 7 == 0。
你虽然用 steps = 7 作为基数,但 steps * i 已经是7的倍数,所以这步其实是隐式满足的。不过为了代码清晰,最好显式加上这个条件。

2. 输出错了,你打印的是固定的 steps 而不是找到的 steps * i
找到解后你打印 '阶梯数是:', steps,但 steps = 7 恒定,结果永远是7。正确的应该是打印 steps * i。

3. break 的缩进有问题
你的 break 跟 if 的缩进不一致,会导致语法错误或逻辑错误。应该和 FIND = True 在同一缩进级内。

4. 不需要 FIND = False 放在 else 里
每轮循环直接判断,找到就 break,不用每次重置 FIND。

修正后的代码示例:

steps = 7
i = 1
FIND = False
while i < 100:
    if (steps * i % 2 == 1 and steps * i % 3 == 2
      and steps * i % 5 == 4 and steps * i % 6 == 5
      and steps * i % 7 == 0):
      FIND = True
      break
    i = i + 1

if FIND == True:
    print('阶梯数是:', steps * i)    # 关键:输出步数乘以倍数
else:
    print('在运行程序范围内找不到答案')


注意:因为 steps=7 已经是7的倍数,实际上最后判断 %7==0 永远是True,可以不写。但加上更通用,万一以后改变 steps 的值也能用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 爱因斯坦那个阶梯数那个题 我这样打为什么不对啊