简单的“制作巧克力”逻辑和解决方案评论

时间:2016-11-09 20:17:21

标签: java loops

我正在编写一个编码蝙蝠问题http://codingbat.com/prob/p191363,这里已有许多解决方案CondingBat Python puzzle results in "Timed out"

我的解决方案被标记为部分正确。试图理解这个问题。

  

我们想制作巧克力的目标公斤包。我们有小酒吧   (每个1公斤)和大酒吧(每个5公斤)。返回的数量很少   假设我们总是在小酒吧之前使用大酒吧。返回   -1如果无法完成。

     

makeChocolate(4,1,9)→4 makeChocolate(4,1,10)→-1
  makeChocolate(4,1,7)→2

据我了解,制作巧克力的方法应该使用所有可用的大棒来达到目标​​,然后使用小条。如果大条已经足够,我会返回0。 有人可以告诉我如果错误地理解了这个问题吗?

这是我的解决方案

public int makeChocolate(int small, int big, int goal) {
    if (small + big*5 < goal)  return -1;

    int smallNeeded = goal - big * 5;

    if(smallNeeded <= 0) return 0;

    return smallNeeded;
}

19 个答案:

答案 0 :(得分:2)

我的理解是这样的:

如果大小合并返回-1

,则不够
if((small + big * 5) < goal)  
{
    return -1;
}

如果大于are足以将goal减少多少5的值(对于大条),则返回左边的数量为多少个小条:

else if((big * 5) > goal)
{
    return goal % 5;
}

如果没有足够的大栏来弥补goal减少大栏所占用的所有公斤的价值并将剩下的小块减少:

else
{
    return goal - big * 5; 
}

答案 1 :(得分:1)

蟒蛇: 用循环试过,其他测试没通过。

def make_chocolate(small, big, goal):
        if goal <= small:
          res = small
        elif big > 0:
            for i in range(big, 0, -1):
                if goal - (5*i) <= small and goal - (5*i) >=0:
                    res = goal - (5*i)
                    break
                else:              
                  res = -1
        else:
            res = -1
   
     return res

答案 2 :(得分:0)

这是我的方法:

def make_chocolate(small, big, goal):

    while goal >= 5:
        if big == 0:
            break
        goal = goal - 1
        big = big - 1

    if goal > small:
        return(-1)
    else:
        return(goal)

答案 3 :(得分:0)

我的 Python 解决方案。在你的脑海中简化它时让它变得简单。花了5分钟解决。

def make_chocolate(small, big, goal):
  if(small + (big*5) < goal) or (goal % 5 > small):
    return -1
    
  if(big*5 < goal):
    return (goal - (big*5))
    
  # If big bars are larger than the goal and have enough small bars
  return goal % 5

答案 4 :(得分:0)

这是我的。它结合了 makeBricks 的解决方案,但需要前面的 if 声明捕捉需要大量小文件来覆盖大文件无法覆盖的实例。

public int makeChocolate(int small, int big, int goal) {
    if (big * 5 <= goal && goal - big * 5 <= small) {
        return goal - (big * 5);
    } else if (goal <= small + big * 5 && goal % 5 <= small) {
        return goal % 5;
    }
    return - 1;
}

答案 5 :(得分:0)

以下是我在工作状态下的python回答

def make_chocolate(small, big, goal):
    rem = goal // 5
    if big >= rem:  #if big count is greater than reminder
       req_small = goal - 5 * rem
       res = small - req_small  #gives you remaining small
       if res < 0:  #this is for negative
          return res
       if res >= 0:
          used = small - res  #subtracting  require small from small count
          return used

    elif big < rem:  # if big count is less than reminder
         req_small = goal - 5 * big
         res = small - req_small  #gives you how many small count remain
         if res < 0:  #this is for negative 
            return res
         if res >= 0:
            used = small - res  #subtracting  req small from small count
            return used

答案 6 :(得分:0)

def make_chocolate(small, big, goal):
    if small + big*5<goal:
        return -1
    elif goal%5<=small and big*5<=goal:
        return goal - (big*5)
    elif goal%5<=small and big*5>goal:
        return (goal - abs(goal/5)*5)
    else:
        return -1

这是一个简单的示例,显示了此代码的工作方式;

def make_chocolate(4,4,18)
    if 4 + 4*5 < 18:
            return -1  (which is not the case)

    elif 18%5<=4 and 4*5<=18:
            return 18 - (4*5)  (this is also not the case)

    elif 18%5<=4 and 4*5>18:
            return (18 - abs(18/5)*5)

    else:
            return -1

答案 7 :(得分:0)

public int makeChocolate(int small, int big, int goal) {
  while( big >0 && (big*5) > goal )
    big--;
  int remain = goal - (big *5);
  if(small - remain >= 0)
    return remain ;
 
  return -1;
}

答案 8 :(得分:0)

def make_chocolate(small, big, goal):
  if goal<=big*5+small:
    if goal%5>small:
      return -1
    elif big*5>goal:
      return (goal%5)
    else:
      return goal-(big*5)
  else:
    return -1

这是我在python中的解决方案。对于任何错误表示歉意,这是我关于stackoverflow的第一篇文章。

答案 9 :(得分:0)

这对我没有影响,对它很有用。

第一个if语句在那里检查它是否可以完成(makeBricks的解决方案) 一旦检查完毕,它只会检查是否可以只使用大个数来完成,如果可以,则返回0, 然后它会检查您是否可以使用所有大酒吧,如果可以,请使用它们并给出仍需要的小酒吧数量 然后下一部分取目标值,将其除以5以查看可以取出多少大条,原因是我们现在知道有足够的值,然后乘以5即可从目标中减去正确的数量。

public int makeChocolate(int small, int big, int goal) {
  if ((goal%5)<=small && (goal-(big*5))<=small) {
    if (goal%5==0 && goal/5<=big)
      return 0;
    if (goal-big*5>0)
      return (goal-big*5);
    return (goal-((goal/5)*5));
  }
  return -1;
}

答案 10 :(得分:0)

def make_chocolate(小,大,目标):

  def b_req(big, goal):
    req = goal//5
    if req <= big and req > 0:
      return req
    else:
      return big


  if goal >= 5:
   s_req = goal - (b_req(big,goal)*5)
  else:
   s_req = goal

  if s_req <= small or s_req == 0:
    return s_req
  else:
    return -1

答案 11 :(得分:0)

public int makeChocolate(int small, int big, int goal) {
  if(big*5+small<goal){
    return -1;
  }
  int hmbigMax = goal/5;
  if(hmbigMax>=big){
    if(small>=(goal-big*5)){
      return goal-big*5;
    }
    else{
      return -1;
    }
  }
  else {
    if(small>=(goal-hmbigMax*5)){
      return goal-hmbigMax*5;
    }
    else{
      return -1;
    }
  }
}

的确,我为该解决方案赢得了好评。

答案 12 :(得分:0)

这是我的解决方法:

def make_chocolate(small, big, goal):
  big_needed = goal // 5
  small_needed = goal % 5

  if ((small + (big * 5)) < goal) or ((big > big_needed) and (small_needed > small)):
    return -1
  elif (big < big_needed) and (small >= (small_needed + ((big_needed-big)*5))):
    return small_needed + ((big_needed-big)*5)
  else:
    return small_needed

答案 13 :(得分:0)

这是我的方法:

public int makeChocolate(int small, int big, int goal) {

  if (goal % 5 <= small && goal / 5 <= big){
   return goal % 5;
  }
  else if (goal / 5 > big && small >= (goal - big * 5)){
   return goal- big * 5;
  }
  else {
   return -1;
  }

}

答案 14 :(得分:0)

def make_chocolate(small, big, goal):
  if (goal>(small+big*5))or((goal%5)>small):
    return -1
  elif big*5>goal:
    return goal%5 
  else:
    return goal-big*5

答案 15 :(得分:0)

int needed_small = goal - Math.min((int) Math.floor(goal / 5), big) * 5;
return needed_small <= small ? needed_small : -1;

答案 16 :(得分:0)

与makeBrics相比,要难一些。希望这会有所帮助:

public int makeChocolate(int small, int big, int goal) {

int bigCapacity = goal/5;

if (bigCapacity>=big && goal-big*5<=small) 
 return goal-big*5;  
else if (bigCapacity<big && goal%5<=small)
 return goal%5;

else return -1;

}      

答案 17 :(得分:0)

这是我的详细解决方案。 我从每个测试用例开始(足够的巧克力,太多的巧克力,足够少的巧克力,没有足够大的巧克力),并针对每个测试用例,更改数字以应对所有可能的情况。

ko.applyBindings(new ReqsViewModel());

答案 18 :(得分:-1)

这是我的方法:

def make_chocolate(small, big, goal):
  nec = 5
  for x in range(big):
    if goal >= nec:
      goal = goal - nec
    else:
      break
  if goal <= small:
    return goal
  else:
    return -1