codingbat的make_bricks题目代码测试不通过求排查提示
问题根源
你当前代码的错误来自于逻辑条件设计完全错误:大量互不相干的条件用or连接,很多条件本身逻辑就是反向的(比如small+big!=goal只要成立就返回True,这显然和需求完全相悖),没有覆盖「总砖块总长度是否足够、剩余需要补的小砖数量是否足够」这两个核心判断逻辑。
正确解题思路
不需要循环,两步即可完成判断:
- 首先计算我们最多能使用的大砖块数量:取「现有大砖数量
big」和「目标长度最多能容纳的大砖数量goal // 5」的较小值,记为used_big - 计算使用上述数量大砖后,剩余需要补齐的长度:
remaining = goal - used_big * 5 - 只要剩余长度小于等于你拥有的小砖数量
small,且剩余长度≥0,就返回True,否则返回False
正确代码示例
def make_bricks(small, big, goal): used_big = min(big, goal // 5) remaining = goal - used_big * 5 return remaining <= small and remaining >= 0
错误用例验证
我们拿你报错的三个测试用例逐一验证:
make_bricks(3, 1, 9):used_big = min(1, 9//5=1) =1,剩余长度9-5*1=4,4>3,返回False,符合预期make_bricks(3, 2, 9):used_big = min(2, 9//5=1) =1,剩余长度9-5*1=4,4>3,返回False,符合预期make_bricks(1, 4, 12):used_big = min(4, 12//5=2) =2,剩余长度12-5*2=2,2>1,返回False,符合预期
内容的提问来源于stack exchange,提问作者Krzysztof Kaczmarek
相关产品推荐
相关产品推荐

