与“代码蝙蝠”问题有关的算法问题

时间:2018-09-30 11:24:03

标签: java logic

https://codingbat.com/prob/p183562

我们要制造一排目标长为英寸的砖块。我们有许多小砖(每个1英寸)和大砖(每个5英寸)。如果可以通过选择给定的砖块来达成目标,则返回true。这比看起来要难一点,并且可以完成而没有任何循环。另请参阅:MakeBricks简介

makeBricks(3,1,8)→是 makeBricks(3,1,9)→否 makeBricks(3,2,10)→true

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

和其他喜欢它的人在......

下不起作用
public boolean makeBricks(int small, int big, int goal) {
  if((small + (big * 5)) < goal){
    return false;
  }
  if((small >= (goal % 5))) {
    return true;
  }
  return false;
}

是。 我们是否不必检查是否足够大?我很困惑。

3 个答案:

答案 0 :(得分:0)

如果您有足够的小积木,那么small + (big * 5)) < goal)条件将已经测试了您是否有足够的大积木。

添加goal % 5 >= big无效,因为您并不总是需要大块砖。如果需要10英寸,则可以使用2块大砖,或10块小砖,或1块大砖和5块小砖。

答案 1 :(得分:0)

下面您可以找到该解决方案的实现(或其中一种解决方案)。

public boolean makeBricks(int small, int big, int goal) {

  int reqBig = goal / 5; // how many big bricks can be used to reach goal

  if (reqBig <= big) 
  {
    if (goal % 5 <= small) // check if you have the required small bricks to reach goal
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  else
  {
    int reqSmall = goal - big*5; // how many small bricks required to reach goal

    if (reqSmall <= small)
    {
      return true;
    }
  }

  return false;
}

答案 2 :(得分:0)

实际上这应该检查积木

public boolean makeBricks(int small, int big, int goal) {

  if ( (goal  <= big*5 + small) && (small >= goal % 5)) {    
      return true;
  }
  return false;
}