魔术序列卡递归算法

时间:2013-09-13 22:19:08

标签: algorithm data-structures poker

我在接受采访时被问到这个问题,我无法完全回答。事实上,面试官本人很困惑。想知道是否有人知道问题和答案的明确细节。

从我记忆中,问题是这样的:

  • 如果您有n张牌,首先将第一张牌面朝上放在桌子上,即可获得神奇的序列, 在甲板的末端插入1 + 1(即)2张牌,取下一张(第3张)牌并将其面朝上放在桌子上,取3 + 1即4张牌并将其插入牌组的末端。

    所以基本上,每次迭代,你拿一张牌面朝下放在桌子上,然后在牌组的末尾插入i + 1张牌。

这是我从问题中理解的,我本可以弄错一些细节。但无论如何,现在的问题是:

  • 给出一个值n(所以让n = 5,所以卡片说的是A,2,3,4,5)
  • 在这些卡形成的魔术序列中找到第k个值。

显然,这可以通过递归来解决,而不必在n之前进行操作。我建议我首先获得魔法序列,然后返回第k个元素,但显然有更好的方法。此外,想知道是否有人知道这个问题的完整细节。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定如何去做,但我认为一种方法可能是解决/简化递归关系:

f(1) = 1
f(2) = 3
f(3) = 7
f(4) = 15

f(k) = 2 * f(k-1) + 1 (mod n)

或者,有些人喜欢称呼它,

2^k - 1 (mod n)

... SHH