Python实现空罐换汽水计算逻辑出错,寻求代码修正方案
修正空瓶换汽水的代码逻辑错误
你的代码存在多处逻辑偏差,导致结果不正确,具体问题和修正方案如下:
原代码的问题
- 初始空瓶数错误:一开始将
a设为n-3,完全忽略了初始的n个空瓶可以直接参与兑换(比如n=5时,初始有5个空瓶,而非2个)。 - 循环条件错误:仅当
a>2时才执行兑换,但实际上只要空瓶数≥3就可以兑换。 - 空瓶数更新错误:兑换后未将新喝汽水产生的空瓶计入,导致空瓶数量计算严重偏离实际。
- 输出逻辑错误:两次
print语句会导致输出多个结果,不符合题目要求的单一输出。
修正方案
方案一:模拟兑换过程(直观易理解)
通过循环模拟每一次兑换的过程,逐步累计喝的总数和剩余空瓶数:
n = int(input()) total = n # 初始喝了n瓶汽水 empty = n # 初始空瓶数量为n while empty >= 3: exchange_num = empty // 3 # 计算当前可兑换的汽水数量 total += exchange_num # 累计喝的总数 # 更新空瓶数:兑换后剩余的空瓶 + 新喝汽水产生的空瓶 empty = empty % 3 + exchange_num print(total)
方案二:数学公式法(高效无循环)
根据兑换规则推导数学公式:3个空瓶换1瓶汽水,等价于每消耗2个空瓶就能额外喝1瓶(兑换的汽水喝完会产生1个空瓶,净消耗2个)。最终总喝的数量公式为:总数 = 初始数量 + (初始数量 - 1) // 2
n = int(input()) print(n + (n - 1) // 2)
两种方案测试结果均符合要求:
- 输入5 → 输出7
- 输入100 → 输出149
内容的提问来源于stack exchange,提问作者金善璽
相关产品推荐
相关产品推荐

