挑战
用最短的代码:
- 计算的任何大小的一副牌上的完美洗牌排列周期的长度Ñ(其中Ñ ≥2和Ñ是偶数)。
- 输出所有周期长度的2≤表Ñ ≤1000(Ñ偶数)。
请注意,定义完美混洗有两种基本方法。有一个out-shuffle,将第一张卡放在顶部,最后一张卡在底部,还有in-shuffle,将第一张和最后一张卡向中心移动一个位置。您可以选择进行混洗还是混洗。两者之间的算法几乎相同。
- 10张牌的随机洗牌次数:[1,2,3,4,5,6,7,8,9,10]↦[1,6,2,7,3,8,4,9,5, 10]。
- 10张牌的随机洗牌:[1,2,3,4,5,6,7,8,9,10]↦[6,1,7,2,8,3,9,4,10, 5]。
图形示例
在这里,我们看到20张卡片组的洗牌周期为18个步长。(这仅用于说明;您的解决方案不需要以图形方式输出周期。)另一方面,经典的52张卡座的洗牌周期只有8个步长(未显示)。
一个在洗牌 20卡甲板上具有仅6步骤的循环长度。
输出的表格示例
您的程序应该输出与此类似的内容,尽管您可以选择最喜欢的任何表格格式。这是为了洗牌:
2 1
4 2
6 4
8 3
10 6
12 10
14 12
16 4
18 8
20 18
22 6
24 11
26 20
28 18
30 28
32 5
34 10
36 12
38 36
40 12
...many lines omitted...
1000 36
问题
- 当n为2的幂时,数字输入n与周期计数之间似乎没有任何联系吗?
- 当n不是2的幂时怎么样?
- 奇怪的是,一张1000张纸牌的洗牌周期只有36个,而一张500张纸牌的洗牌周期是166个。为什么会这样?
- 您能找到的最大循环计数c远小于n的数字是多少,这意味着n / c的比值最大?