我正在编写一个编码蝙蝠问题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;
}
答案 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