algorithm - 纸牌魔术序列递归算法

标签 algorithm data-structures poker

我在面试中被问到这个问题,我无法完全回答。事实上,面试官自己也很困惑。想知道是否有人知道问题的明确细节和答案。

根据我的内存,问题是这样的:

  • 如果你有 n 张牌,首先将第一张牌面朝上放在 table 上,你会得到一个魔法序列, 在牌组末端插入 1+1(即 2 张牌),拿下一张(第 3 张)牌并将其面朝上放在 table 上,拿 3+1(即 4 张牌)并将它们插入牌组末端。

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

这是我从问题中了解到的,我可能有一些细节错误。但无论如何,现在的问题是:

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

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

谢谢!

最佳答案

我不确定具体该怎么做,但我认为一种方法可能是解决/简化递推关系:

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)

...嘘

关于algorithm - 纸牌魔术序列递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796101/

相关文章:

java - 获取等差数列或等比数列中的下一个序列

python - 什么是组合相关但存储在不同数据帧中的数据集的好设计模式?

Aho-Corasick字符串匹配算法的Java实现?

c - C语言扑克程序

c# - 更好的 C# 扑克框架设计?

algorithm - 快速算法复杂度计算

algorithm - 是否可以找到次二次时间所有点的最近点?

C++ 继承与重载无法编译?

ruby - 哈希表的键在哪里?

c++ - 字符数组的最佳替代品