старый вопрос, который я знаю, но странно, что никто не выдвинул фактическое решение математики ..
countrifflecards[deck_] := Module[{n = Length@deck, ct, rifdeck},
ct = 0;
rifdeck =
Riffle @@
Partition[ # , Ceiling[ n/2], Ceiling[ n/2], {1, 1}, {} ] &;
NestWhile[(++ct; rifdeck[#]) &, deck, #2 != deck &,2 ]; ct]
Это обрабатывает четные и нечетные случаи:
countrifflecards[RandomSample[ Range[#], #]] & /@ Range[2, 52, 2]
{1, 2, 4, 3, 6, 10, 12, 4, 8, 18, 6, 11, 20, 18, 28, 5, 10, 12, 36, 12, 20, 14, 12, 23, 21, 8}
countrifflecards[RandomSample[ Range[#], #]] & /@ Range[3, 53, 2]
{2, 4, 3, 6, 10, 12, 4, 8, 18, 6, 11, 20, 18, 28, 5, 10, 12, 36, 12, 20, 14, 12, 23, 21, 8, 52}
Вы можете легко показать, если вы добавите карту в нечетный случай, дополнительная карта останется внизуи не изменяйте последовательность, следовательно, результатом нечетного случая является просто n+1
четный результат ..
ListPlot[{#, countrifflecards[RandomSample[ Range[#], #]]} & /@
Range[2, 1000]]
