도전
가장 짧은 코드 양에서 :
- 모든 크기의 n ( n ≥ 2 및 n 은 짝수) 인 카드 데크에서 완벽한 셔플의 순열주기 길이를 계산합니다 .
- 2 ≤ n ≤ 1000 ( n 짝수) 동안 모든 사이클 길이의 테이블을 출력합니다 .
완벽한 셔플을 정의하는 두 가지 기본 방법이 있습니다. 첫 번째 카드를 맨 위에 놓고 마지막 카드를 맨 아래에 유지 하는 아웃 셔플 이 있으며 첫 번째 카드 와 마지막 카드를 중앙으로 한 위치 이동시키는 셔플 이 있습니다. 셔플 중 또는 셔플 중 하나를 수행 할 수 있습니다. 알고리즘은 둘 사이에서 거의 동일합니다.
- 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 비율 이 최대화됩니다.