我在 javabat 中遇到了这个问题(http://www.javabat.com/prob/p183562):
我们想要制作一排目标英寸长的砖块。我们有许多小砖(每个 1 英寸)和大砖(每个 5 英寸)。如果可以通过从给定的砖块中选择来实现目标,则返回 true。这比看起来要难一些,并且可以在没有任何循环的情况下完成。
makeBricks(3, 1, 8) → true
makeBricks(3, 1, 9) → false
makeBricks(3, 2, 10) → true
我想出了这个解决方案:
public boolean makeBricks(int small, int big, int goal) {
if (goal > small + big * 5)
return false;
else if (goal % 5 == 0)
return goal / 5 <= big;
else
return goal % 5 <= small;
}
这通过了测试。但我自己找到了一个反例:makeBricks(10, 0, 10) -> true。我的逻辑将返回错误。我应该如何修正我的逻辑?还是有更好的方法来做到这一点?