สมมติว่าเรามีวงกลมที่ประกอบด้วยตัวเลข 1 ถึง N และมีตัวเลข A และ B เราสามารถยืนที่จุดใดก็ได้ (x) และคำนวณผลรวมระยะทาง Z = ระยะทางจาก x ไป A + ระยะทางจาก x ไป B เราต้องเลือก x ให้ Z น้อยที่สุด โดย x ไม่สามารถเป็น A หรือ B ได้ คืนค่า Z ที่น้อยที่สุด
เช่น N = 30, A = 10, B = 20 ผลลัพธ์คือ 10 โดยเลือก x = 15 ระยะทางไป A = 5, ไป B = 5 รวม = 10
ขั้นตอนการแก้ปัญหา
- ถ้า
a > bให้สลับค่า - คำนวณระยะทางตามเข็มนาฬิกา
clock_wise_dist = b - a - คำนวณระยะทางทวนเข็มนาฬิกา
counter_clock_wise_dist = (a - 1) + (n - b + 1) - หา
minimum_dist = min(clock_wise_dist, counter_clock_wise_dist) - ถ้า
minimum_dist == 1คืนค่า 3 มิฉะนั้นคืนค่าminimum_dist
ตัวอย่างโค้ด Python
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