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

Rk *_*iri 5 java loops

我正在研究一个编码蝙蝠问题http://codingbat.com/prob/p191363,这里已经有很多解决方案CondingBat Python 谜题导致“超时”

\n\n

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

\n\n
\n

我们想要制作一包目标公斤的巧克力。我们有小金条(每条 1 公斤)和大金条(每条 5 公斤)。返回要使用的小 \n 条数,假设我们总是在小条之前使用大条。如果无法完成,则返回 -1。

\n\n

makeChocolate(4, 1, 9) \xe2\x86\x92 4 makeChocolate(4, 1, 10) \xe2\x86\x92 -1
\n makeChocolate(4, 1, 7) \xe2\x86\x92 2

\n
\n\n

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

\n\n

这是我的解决方案

\n\n
public int makeChocolate(int small, int big, int goal) {\n    if (small + big*5 < goal)  return -1;\n\n    int smallNeeded = goal - big * 5;\n\n    if(smallNeeded <= 0) return 0;\n\n    return smallNeeded;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

dun*_*can 1

我的理解是这样的:

如果大和小组合回报还不够-1

if((small + big * 5) < goal)  
{
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

如果足够大,则减少goal5 个值(对于大条形),然后返回剩余的小条形数量:

else if((big * 5) > goal)
{
    return goal % 5;
}
Run Code Online (Sandbox Code Playgroud)

如果没有足够的大条来弥补,则将goal值减少大条所占用的所有公斤,并将剩余的小条取为小:

else
{
    return goal - big * 5; 
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为如果你没有足够小但又足够大的话,这会失败。例如,目标为 12,3 个大和 1 个小:小+大*5 = 16,即 &gt; 目标。然而,big*5 = 15 &gt; 12 =&gt; 返回 12%5,这将是 2...但我们只有一颗红宝石!我们需要 if((small + big * 5) &lt; goal ||small &lt; goal%5) { return -1; } (2认同)