如何修正蜗牛爬井问题代码,获取正确的逃脱天数?
解决蜗牛爬井问题的代码修正
嘿,这个坑我之前踩过!你的代码结果不对,核心原因就是没考虑最后一天蜗牛爬出井口后就不会再滑落了——现在的逻辑把每一天都当成“爬上去又滑下来”,但实际上最后一天白天爬完直接就逃出井了,根本不会有夜间滑落的过程。
错误原因分析
你的代码里,每天都是让蜗牛先爬再滑,净前进30-20=10厘米,这样算下来125/10=12.5,取整得到13天。但实际情况是:
- 第10天结束时,蜗牛的位置是
10*10=100厘米 - 第11天白天,蜗牛直接爬30厘米,到达
100+30=130厘米,已经超过了125厘米的井深,直接逃出去了,不用再滑落
修正后的代码方案一(直观逻辑)
我们可以调整顺序:先让蜗牛完成白天的爬行,立刻检查是否逃出,没逃出再处理夜间滑落:
well_height = 125 daily_distance = 30 nightly_distance = 20 snail_position = 0 days = 0 while True: days += 1 # 先完成白天的爬行 snail_position += daily_distance # 检查是否已经爬出井口 if snail_position >= well_height: break # 没爬出的话,夜间滑落 snail_position -= nightly_distance print(days)
修正后的代码方案二(数学优化)
另一种思路是先计算蜗牛需要多少天才能爬到“白天一爬就能出去”的位置,再加最后一天:
well_height = 125 daily_distance = 30 nightly_distance = 20 snail_position = 0 days = 0 # 循环条件:当前位置加上白天爬行距离还不够逃出,说明当天结束后还会滑落 while snail_position + daily_distance < well_height: days += 1 snail_position += daily_distance - nightly_distance # 最后一天直接爬出去 days += 1 print(days)
两种方案运行后都会得到正确结果11天,核心都是把最后一天的特殊情况单独处理,不再套用“爬滑循环”的逻辑。
内容的提问来源于stack exchange,提问作者FFF
相关产品推荐
相关产品推荐

