Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tìm tổng khoảng cách nhỏ nhất đến A và B từ một điểm nguyên trên vòng kích thước N trong Python


Giả sử có một vòng tròn gồm các số từ 1 đến N. Ta có hai số A và B. Ta có thể đứng tại bất kỳ vị trí x nào và tính tổng khoảng cách Z = khoảng cách từ x đến A + khoảng cách từ x đến B. Cần chọn x sao cho Z nhỏ nhất (x không trùng với A và B). Trả về giá trị Z nhỏ nhất.

Ví dụ: N = 30, A = 10, B = 20, thì đầu ra là 10 (chọn x = 15, khoảng cách đến A là 5, đến B là 5, tổng = 10).

Giải thuật

Các bước:

  • Nếu a > b thì hoán đổi a và b.
  • Tính khoảng cách theo chiều kim đồng hồ: clock_wise_dist = b - a.
  • Tính khoảng cách ngược chiều kim đồng hồ: counter_clock_wise_dist = (a - 1) + (n - b + 1).
  • Lấy minimum_dist = min(clock_wise_dist, counter_clock_wise_dist).
  • Nếu minimum_dist == 1 thì trả về 3 (do x không được trùng A, B).
  • Trả về minimum_dist.

Ví dụ

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))

Đầu vào

30, 10, 20

Đầu ra

10