檢查Python中是否所有人員都能在兩臺機器上投票


假設我們有一個數字n表示n個人,並且有兩臺相同的投票機。我們還有一個名為time大小為n的陣列,其中time[i]表示第i個人在任何機器上花費的總時間。在同一時間點,每臺機器上只能有一人。我們還有一個值x,表示機器可執行的最大允許時間,我們必須檢查是否所有人員都能投票。

因此,如果輸入類似於n = 3,x = 7,time = [3, 5, 3],則輸出為True。因為在時間t0,第0個人去第一臺機器,第1個人去第二臺機器。現在在時間t3,第一臺機器空閒。現在第2個人去第一臺機器,在時間t5第二臺機器空閒,在時間t6第一臺機器空閒,所以所有參與者都在規定時間內投票。

為了解決這個問題,我們將遵循以下步驟:

  • total_sum := time所有元素的總和
  • 如果total_sum <= x,則
    • 返回True
  • 對列表time進行排序
  • prev_sum := 一個與time大小相同的陣列,並填充0
  • prev_sum[0] := time[0]
  • 對於範圍從1到prev_sum大小的i,執行:
    • prev_sum[i] := prev_sum[i - 1] + time[i]
  • 對於範圍從0到prev_sum大小的i,執行:
    • 對於範圍從i + 1到prev_sum大小-1的j,執行:
      • temp_sum := prev_sum[i] + (total_sum - prev_sum[j])
      • 如果temp_sum <= x並且total_sum - temp_sum <= x,則
        • 返回True
  • 返回False

讓我們看看下面的實現來更好地理解:

示例

線上演示

def solve(n, x, time):
   total_sum = sum(time)
   if total_sum <= x:
      return True
   time.sort()
   prev_sum = [0 for i in range(len(time))]
   prev_sum[0] = time[0]
   for i in range(1, len(prev_sum)):
      prev_sum[i] = prev_sum[i - 1] + time[i]
   for i in range(0, len(prev_sum)):
      for j in range(i + 1, len(prev_sum)):
         temp_sum = (prev_sum[i] + (total_sum - prev_sum[j]))
         if temp_sum <= x and total_sum - temp_sum <= x:
            return True
   return False
n = 3
x = 7
time = [3, 5, 3]
print(solve(n, x, time))

輸入

3, 7, [3, 5, 3]

輸出

True

更新於:2020-12-30

72 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.