在 Python 中查詢收集等距物品所覆蓋的距離


假設要組織一場比賽。在道路上放置不同的石頭。比賽起點有一個桶,距離第一塊石頭 6 個單位。其他石頭彼此相隔 4 個單位,並依次排成一條直線。現在,參賽者從桶開始,然後收集最近的石頭,返回並將石頭放入桶中,然後再次跑出去收集下一個最近的石頭,跑回來,並將其放入桶中。這個過程將持續到所有石頭都被放入桶中。如果石頭數量為 n,那麼我們必須找到參賽者需要覆蓋的總距離。

因此,如果輸入像 n = 5,則輸出將為 140,因為 2*6 + 2(6 + 4) + 2(6 + 4 + 4) + 2(6 + 4 + 4 + 4) + 2(6 + 4 + 4 + 4 + 4) = 140

為了解決這個問題,我們必須解決以下方程式:

  • 對於石頭 1,我們必須覆蓋 (6+6) = 2*6 的距離

  • 對於石頭 2,我們必須覆蓋 ((6+4)+(6+4)) = 2*(6+4) 的距離

  • 對於石頭 3,我們必須覆蓋 ((6+4+4)+(6+4+4)) = 2*(6+4+4) 的距離

  • 對於石頭 n,我們必須覆蓋 ((6+4*(n-1))+(6+4*(n-1))) = 2*(6+4*(n-1)) 的距離

對於所有石頭,我們必須覆蓋:

  • D = 2*6 + 2*(6+4) + 2*(6+4+4) + … + 2*(6+4*(n-1))

  • D = 2*[6 + (6+4) + (6+2*4) + … + (6+(n-1)*4)]

  • D = 2*[6n + 4(1 + 2 + … + (n-1))]

  • D = 2*[6n + 4(n*(n-1)/2)]

  • D = 2*[6n + 2(n*(n-1))]

示例

讓我們看看以下實現以獲得更好的理解:

線上演示

def find_distance(n):
   return 2*(6*n + 2*((n-1)*n))
n = 5
print(find_distance(n))

輸入

5

輸出

140

更新於: 2020年8月19日

74 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告