You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中修复make_chocolate函数始终返回-1的问题

修复make_chocolate函数的错误

原代码的问题点

  • 嵌套循环逻辑致命错误:第一次判断不匹配就直接返回-1,根本没遍历所有可能的组合
  • 返回值不符合需求:要求返回小巧克力的数量,但代码返回的是大巧克力的数量i
  • 循环起始值错误:从1开始,忽略了可以不用大巧克力(比如goal=3,只用小的)或不用小巧克力(比如goal=5,只用大的)的场景
  • 计算冗余:sum(list((i*5,j*1)))完全可以简化为i*5 + j,没必要转列表再求和

正确实现逻辑(优先用大巧克力)

不需要嵌套循环遍历所有组合,直接计算最优解:

  1. 先算最多能用多少块大巧克力:取big和goal // 5的较小值(不能超过现有库存,也不能超过目标重量能容纳的5kg块数)
  2. 计算目标重量减去大巧克力贡献的重量,得到需要小巧克力填补的剩余重量needed_small
  3. 如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:05:08