Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค้นหาผลรวมขั้นต่ำของระยะทางไปยัง A และ B จากจุดจำนวนเต็มใดๆ ในวงแหวนขนาด N ใน Python


สมมติว่าเรามีวงแหวนซึ่งทำจากตัวเลขไม่กี่ตัวจาก 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