ท้าทาย
ในจำนวนรหัสที่สั้นที่สุด:
- คำนวณความยาวของวงจรการเปลี่ยนแปลงของการสลับที่สมบูรณ์แบบบนสำรับไพ่ทุกขนาดn (โดยที่n ≥ 2 และnเป็นคู่)
- เอาท์พุทตารางของทุกความยาวรอบ 2 ≤ n ≤ 1000 ( nแม้)
โปรดทราบว่ามีวิธีพื้นฐานสองวิธีในการกำหนด 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และจำนวนรอบของมันเมื่อnคือพลังของ 2?
- แล้วเมื่อnไม่ใช่พลังของ 2 ล่ะ?
- สำรับไพ่ 1000 ใบมีจำนวนรอบการสับเปลี่ยนออกเพียง 36 ในขณะที่สำรับ 500 ใบมีจำนวนรอบสับเปลี่ยนออกเป็น 166 รอบเหตุใดจึงเป็นเช่นนี้
- อะไรคือจำนวนมากที่สุดที่คุณสามารถพบได้ซึ่งวัฏจักรนับcมีขนาดเล็กกว่าnอย่างมากมายหมายความว่าอัตราส่วนn / cถูกขยายให้ใหญ่สุด?