ให้ลำดับของจำนวนเต็มหรือเฉพาะเจาะจงมากขึ้นการเปลี่ยนแปลงของ0..N
ลำดับนี้ดังนี้
- เอาท์พุท [x] = ย้อนกลับ (อินพุต [อินพุต [x]])
- ทำซ้ำ
ตัวอย่างเช่น: [2,1,0]กลายเป็นและที่ตรงกันข้ามคือ[0,1,2] กลายเป็นและย้อนกลับ[2,1,0][0,2,1][0,1,2][2,1,0]
ตัวอย่างที่ 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
ตัวอย่างที่ 2
In: 2 1 0
S#1: 2 1 0
Output: 0
ตัวอย่างที่ 3
In: 3 0 1 2
S#1: 1 0 3 2
S#2: 3 2 1 0
S#3: 3 2 1 0
Output: 2
ตัวอย่างที่ 4
In: 3 0 2 1
S#1: 0 2 3 1
S#2: 2 1 3 0
S#3: 2 0 1 3
S#4: 3 0 2 1
Output: 3
งานของคุณคือการกำหนดฟังก์ชั่น (หรือโปรแกรม) ที่ใช้การเรียงสับเปลี่ยนของจำนวนเต็ม0..Nและส่งกลับ (หรือเอาท์พุท) จำนวนขั้นตอนจนกระทั่งการเปลี่ยนแปลงเกิดขึ้นที่เกิดขึ้นแล้ว ถ้าXแปรรูปXแล้วส่งออกควรจะเป็นศูนย์ถ้าXแปลงไปYและYไปX(หรือY) แล้วออกที่ควรจะเป็น 1
Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps
Testcases:
4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 ->
5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps
หากภาษาของคุณไม่รองรับ "ฟังก์ชั่น" คุณอาจสันนิษฐานได้ว่าลำดับนั้นถูกกำหนดให้เป็นรายการแบบแยกช่องว่างของจำนวนเต็มเช่น0 1 2หรือ3 1 0 2ในบรรทัดเดียว
ข้อเท็จจริงสนุก:
- ลำดับ 0,1,2,3, .. , N จะเปลี่ยนเป็น N, ... , 3,2,1,0 เสมอ
- ลำดับ N, .. , 3,2,1,0 จะเปลี่ยนเป็น N, .. , 3,2,1,0 เสมอ
- ลำดับ 0,1,3,2, ... , N + 1, N จะเปลี่ยนเป็น N, ... , 3,2,1,0 เสมอ
งานโบนัส : คิดสูตรทางคณิตศาสตร์
กฎทางเลือก :
- หากดัชนีแรกของภาษาของคุณคือ 1 แทนที่จะเป็น 0 คุณสามารถใช้วิธีเรียงสับเปลี่ยน
1..N(คุณสามารถเพิ่มหนึ่งลงในจำนวนเต็มทุกตัวอย่างและตัวอย่าง)
3,0,1,2ควรเปลี่ยนเป็น2,3,0,1