C++实现求所需易拉罐数及剩余盎司代码输出异常Bug定位求助
Bug原因分析
你代码里的ounce_left计算逻辑完全不符合需求给定的公式,错误使用了取余运算:
- 取余运算
amount%12得到的是装满若干整罐后剩下的、装不满1罐的液体盎司数,不是易拉罐的空余容量 - 对应你提到的报错场景:假设输入
amount=20,20%12=8就是你实际输出的8,但需求要的空余容量是12*2 -20 =4,二者刚好是互补关系。
修复方案
选任意一种修改ounce_left的赋值语句即可:
方式1:直接使用需求公式计算,逻辑最清晰
将原代码行
int ounce_left=amount%12;
替换为:
int ounce_left = 12 * cans_needed - amount;
方式2:用取余结果推导,需处理整除特殊情况
如果总盎司数刚好是12的整数倍,说明没有空余,否则空余容量为12减去取余结果:
int ounce_left = amount % 12 == 0 ? 0 : 12 - amount % 12;
两种方案测试结果一致:输入20时,cans_needed=2,ounce_left=4,符合预期。
内容的提问来源于stack exchange,提问作者Maia Gomes Medeiros
相关产品推荐
相关产品推荐

