java - 一道java练习题

标签 java logic

我在 javabat( http://www.javabat.com/prob/p183562 ) 中遇到了这个问题:

We want to make a row of bricks that is goal inches long. We have a number of small bricks (1 inch each) and big bricks (5 inches each). Return true if it is possible to make the goal by choosing from the given bricks. This is a little harder than it looks and can be done without any loops.

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。我的逻辑将返回 false。我应该如何修正我的逻辑?或者有更好的方法吗?

最佳答案

我认为您可以删除第二个测试。我会试试这个:

public boolean makeBricks(int small, int big, int goal) {
    if (goal > small + big * 5)
        return false;
    else
        return goal % 5 <= small;
}

第一个测试只是检查如果我们将所有 砖 block 排成一行,那么该行会有多长。如果这达不到目标,那么我们就知道这是不可能的。

接下来,我们计算小砖 block 的最小数量:goal % 5。例如,如果目标是 8,我们有 1000 block 大砖,那么我们需要多少 block 小砖? 8 % 5 是 3,所以我们需要在行尾放置 3 个小砖 block 。

如果我们有足够的小砖 block ,并且所有砖 block 的总长度足够,那么我们就可以达到目标。

关于java - 一道java练习题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053971/

相关文章:

performance - OR 语句是否比多个 IF 语句更快?

programming-languages - 为什么大多数编程语言中没有更多的控制结构?

php - 在 PHP 上解析 JSON 并提取特定值

java - 如何动态更改JList中所选项目的背景颜色

java - 使用java创建图像文件

java - 加密货币

php - PHP 分页问题

java - Spring + jetty : graceful shutdown

java - 类似于 FakeWeb for Java 的功能

java - 不确定密码检查器的逻辑错误在哪里