สมมติว่าเรามีวงแหวนซึ่งทำจากตัวเลขไม่กี่ตัวจาก 1 ถึง N เรายังมีหมายเลขพ่วง A และ B ด้วย ตอนนี้เราสามารถยืนอยู่ที่ใดก็ได้ (พูด x) และ ดำเนินการนับโดยคำนึงถึงผลรวมของระยะทาง (เช่น Z =ระยะทางจาก X ถึง A + ระยะทางจาก X ถึง B) เราต้องเลือก X เพื่อให้ Z ย่อเล็กสุด ในตอนท้ายคืนค่า Z เราต้องจำไว้ว่า X จะไม่เหมือนกับ A และ B
ดังนั้น หากอินพุตเป็น N =30, A =10, B =20 ดังนั้นเอาต์พุตจะเป็น 10 โดยเลือก X =15 ระยะทางจาก X ถึง A คือ 5 และระยะห่างจาก X ถึง B คือ 5 ดังนั้น ระยะทางทั้งหมด =5 + 5 =10
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้า a> b ไม่ใช่ศูนย์ แล้ว
-
สลับ a และ b
-
-
clock_wise_dist :=b - a
-
counter_clock_wise_dist :=(a - 1) +(n - b + 1)
-
maximum_dist :=ค่าต่ำสุดของ clock_wise_dist, counter_clock_wise_dist
-
ถ้า maximum_dist เหมือนกับ 1 แล้ว
-
กลับ 3
-
-
คืนค่าขั้นต่ำ_dist
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def get_min_z(n, a, b): if (a > b): a, b = b, a clock_wise_dist = b - a counter_clock_wise_dist = (a - 1) + (n - b + 1) minimum_dist = min(clock_wise_dist, counter_clock_wise_dist) if (minimum_dist == 1): return 3 return minimum_dist n = 30 a = 10 b = 20 print(get_min_z(n, a, b))
อินพุต
30, 10, 20
ผลลัพธ์
10