2025年6月19日 星期四

二分搜

 # 一輛卡車要運貨物,你想知道最大能載多重?

def can_carry(weight):

  return weight<=1000


l,r = 0,2000

while l<r:

  m = (l+r+1)//2

  if can_carry(m):

    l = m

  else:

    r = m-1

print('最大載重:',l)


Output:


最大載重: 1000


# 為什麼寫 (l + r + 1) // 2?

# 這是避免「死循環」的技巧,因為:

# 若你寫的是 m = (l + r) // 2,當 l + 1 == r 時,m 會等於 l,不會推進範圍。

# +1 可以保證在 l + 1 == r 的情況下,m == r,然後觸發 r = m - 1 或 l = m,這樣才能收斂。

沒有留言:

張貼留言