服用'N`糖果的方式数量

时间:2015-07-05 03:34:05

标签: algorithm math puzzle

我有一个问题,我不知道如何开始解决它。你知道某人的公式,算法或问题类型吗?

我只有NN个糖果,而且我需要计算服用N糖果的方式数量,但除了第一个糖果外,所用的糖果必须是与以前拍摄的糖果相邻。例如,如果N = 3有四种方法:

  • 先取1号糖果;然后糖果2,3。
  • 先拿2号糖果;然后是1,3。
  • 先拿2号糖果;然后3,1。
  • 先取3号糖果;然后糖果2,1。

6 个答案:

答案 0 :(得分:3)

n糖果的方式数量是pascal's triangle n-1行的总和。

答案 1 :(得分:2)

如果先拿糖果k,那么选择(n-1,k-1)方式选择其余的(其中,选择(n,k)是二项式系数nCk)。那是因为在第一次之后,你要么必须把最右边的非选择糖果带到k的左边,要么把最左边的未选择糖果带到k的右边,并且k左边有(k-1)个糖果。

总结k,给出考虑第一选择的所有可能方法:sum(k = 1 ... n)选择(n-1,k-1)。

由于选择(n-1,k-1)是从n-1项中选择k-1项的方式数,因此该总和等于从n-1中选择任意数量项的方式数项目。那是2 ^(n-1)。

答案 2 :(得分:1)

看看模式:

number of candies
1   2   3   4
1   12  123 1234
    21  213 2134
        231 2314
        321 2341
            3214
            3241
            3421
            4321
1   2   4   8
total ways

这会让你想起什么吗?

答案 3 :(得分:1)

我们先说我们先吃i-th糖果。然后我们左侧有i - 1个糖果,右侧有N - i个糖果。接下来每一颗糖果都是从左侧部分最右侧,或从右侧部分最左侧。左侧和右侧部分是独立的,因此获取所有糖果的可能方式的数量是序列LLLL....LLLRRR....RRR的唯一排列数,其中i - 1 L'sN - i {{1} }。

此类排列的总数为:

R's

现在,如果我们总结所有可能的SequenceLength!/(count(L)!*count(R)!) = (N - 1)!/((i - 1)! * (N - i)!) 值,我们有:

formula

答案 4 :(得分:1)

您无需通过二项式系数。

有长度为n-1的Rs和Ls的2 ^(n-1)个序列。通过记下你的下一个糖果是否在你之前吃过的糖果的右边或左边,这些都是对糖果序列的双向投射。任何Rs和Ls序列唯一地确定第一个糖果的位置:如果有Ls,那么第一个糖果必须位于a + 1的位置。

答案 5 :(得分:0)

另一种实现,在理论上可能更有用:

给出1个索引数组C糖果大理石(1个尚未拍摄,0个拍摄,全部从1开始)和起点N

  1. 如果N为负数,零或大于C的大小,则不执行任何操作。
  2. 如果C[N]为0,则不做任何操作而结束。
  3. 如果C[N]为1,则将其设置为0,将可能路径数加1,然后针对此算法检查C[N-1]C[N+1]
  4. 只需对C中的每个有效索引重复此算法。另外,请确保每次递归都有C的副本,而不是原始C,但它们都共享路径总数。

    单步执行示例的第一部分:

    1. C[1]为1,因此我们将其设置为0,添加1,然后选中C[0]C[2]
    2. 0为0,所以我们停止递归。
    3. C[2]为1,因此我们将其设置为0并检查C[1]C[3]
    4. C[1]为0。
    5. C[3] is 1, so we set it to 0 and check C [2] and C [4]`。
    6. C[2]为0。
    7. 4大于3.
    8. 重复N=2N=3,对于更长的数组,只需循环。