-2

我需要一些帮助来解决我在课堂上分配的问题。这是我们对for loops. 这是问题所在:

考虑以下谜语。

到目前为止,这就是我所拥有的:

function pile = IslandBananas(numpeople, numbears)
for pilesize=1:10000000


end

我非常感谢您的意见。谢谢!

4

1 回答 1

2

我会帮助你,但你需要更加努力。而且,您只需要一个 for 循环。首先,想想你将如何构建这个算法。好吧,您知道您必须使用 for 循环,这是一个开始。因此,让我们考虑一下问题中发生了什么。

1)你有一堆。

2)第一个晚上有人拿了一堆,分成3份,发现剩下一个,这意味着mod(pile,3) = 1

3) 但他丢弃了多余的香蕉。这意味着(pile-1)

4) 他拿走了三分之一,剩下三分之二。这意味着(2/3)*(pile-1)

5) 早上他们把这堆东西分成 3 份,然后又发现还剩 1 份,所以这意味着mod((2/3)*(pile-1),3) = 1

6)但他们丢弃了多余的香蕉。这意味着(2/3)*(pile-1)-1

7) 最后,如果要尽可能堆成最小的香蕉,他们每个人都必须至少有一根香蕉。因此,最小的堆必须是这样的(1/3)*((2/3)*(pile-1)-1) = 1

我基本上已经给了你答案,剩下的你可以用公式(1/3)*((2/3)*(pile-1)-1)和一个简单的 if 语句来测试最小的可能整数,即 1。这可以在你的 for 循环内的四行中完成。

现在,将其扩展到任意数量的人和任意数量的熊需要在该公式中进行两个简单的替换!如果你的老师需要它,这可以很容易地分成两个嵌套的 for 循环。

于 2013-07-24T21:52:26.800 回答