Python中修复make_chocolate函数始终返回-1的问题
修复
make_chocolate函数的错误 原代码的问题点
- 嵌套循环逻辑致命错误:第一次判断不匹配就直接返回
-1,根本没遍历所有可能的组合 - 返回值不符合需求:要求返回小巧克力的数量,但代码返回的是大巧克力的数量
i - 循环起始值错误:从
1开始,忽略了可以不用大巧克力(比如goal=3,只用小的)或不用小巧克力(比如goal=5,只用大的)的场景 - 计算冗余:
sum(list((i*5,j*1)))完全可以简化为i*5 + j,没必要转列表再求和
正确实现逻辑(优先用大巧克力)
不需要嵌套循环遍历所有组合,直接计算最优解:
- 先算最多能用多少块大巧克力:取
big和goal // 5的较小值(不能超过现有库存,也不能超过目标重量能容纳的5kg块数) - 计算目标重量减去大巧克力贡献的重量,得到需要小巧克力填补的剩余重量
needed_small - 如果
needed_small在0到small之间(包括边界),返回needed_small;否则返回-1
修复后的代码
def make_chocolate(small, big, goal): # 优先使用最大可能的大巧克力数量 max_big = min(big, goal // 5) needed_small = goal - max_big * 5 # 检查剩余重量是否能被小巧克力满足 return needed_small if 0 <= needed_small <= small else -1 # 测试验证 print(make_chocolate(2, 2, 12)) # 输出2(2*5 + 2*1 = 12) print(make_chocolate(3, 1, 8)) # 输出3(1*5 + 3*1 = 8) print(make_chocolate(0, 2, 11)) # 输出-1(2*5=10,还差1但没有小巧克力)
原测试案例的错误原因
调用make_chocolate(2,2,12)时,原代码第一次循环i=1、j=1,计算5+1=6≠12,直接返回-1,完全没机会遍历到i=2、j=2的正确组合。
内容的提问来源于stack exchange,提问作者Hadsga
相关产品推荐
相关产品推荐

