如果我们将12个延伸到任何数字,在圣诞节的十二天内会有多少礼物?

时间:2010-02-26 03:03:26

标签: algorithm

今天我在接受采访时得到了这个问题:写一个函数来计算12天圣诞歌曲中任何一天收到的礼物总数。我在c#'ish代码中使用for()循环编写了一个简单的函数。然后面试官让我把它延长到任意天数。然后谈话转向如何优化循环。显然有一个很酷的数学技巧,可以在你的整数范围内做到这一点。任何人都知道它是什么以及它叫什么?任何语言都可以,并且算法的参考将是fabuloso。

使用递归的答案不是我正在寻找的。

编辑:第2天的答案总共是4个礼物,而不是3个,因为我将有2棵树(今天1个,昨天1个)和2个鹧。在第12天,我将收到总计364.我想要的公式让我输入12并得到364。

4 个答案:

答案 0 :(得分:20)

  • 第一天,你得到1。
  • 第二天,你得到1 + 2。
  • 第三天,你得到1 + 2 + 3。
  • ...
  • n天,你得到1 + 2 + 3 + ...... + n

总和1 + 2 + ... + nn(n+1)/2。因此总数T(N)n(n+1)/2n 1..N的总和,其中N是天数。

现在n(n+1)/2 = n^2 / 2 + n / 2n^2 n 1..N的总和是N(N+1)(2N+1)/6,所以你得到:

T(N) = N(N+1)(2N+1)/12 + N(N+1)/4
     = N(N^2 + 3N + 2) / 6

没有循环。没有递归。

答案 1 :(得分:5)

$ P $ -th类型的礼物(其中$ 1 $ st是鹧,, $ 2 $ nd是海龟鸽子等)的数量为$P = \sum_{X = 1}^{P} 1$

在$ D $当天,您会收到$ 1 $到$ D $类型的礼物,当天共有$\sum_{P = 1}^{D} \sum_{X = 1}^{P} 1 $多礼物。

所以,如果从$ 1 $到$ N $(规范地,$ N $是12,但我们现在的兴趣是允许它变化),你会得到整体$\sum_{D = 1}^{N} \sum_{P = 1}^{D} \sum_{X = 1}^{P} 1$

这会计算非递减三元组的数量$1 \leq X \leq P \leq D \leq N$.

这与增加三元组$1 \leq X < P + 1 < D + 2 \leq N + 2$.

的数量相同

答案是$\binom{N + 2}{3} = \frac{(N + 2)(N + 1)N}{6}$.

答案 2 :(得分:1)

n 的第二天,我们获得了1 + 2 + 3 + ... + n个礼物。

或...... (1 + n) + (2 + n-1) + ...

换句话说,(n + 1) * n/2

答案 3 :(得分:-1)

您会收到364份礼物。

1
2 + 1 = 3
3 + 2 + 1 = 6
4 + 3 + 2 + 1 = 10
5 + 4 + 3 + 2 + 1 = 15
6 + 5 + 4 + 3 + 2 + 1 = 21
7 + 6 + 5 + 4 + 3 = 2 + 1 = 28
8 + 7 + 6 + 5 + 4 + 3 + 2 + = 36
9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 55
11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 66
12 + 11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 78

如果将它们全部加起来,您将得到364。