在 Python 中查詢得分以二進位制字串表示的比賽獲勝者


假設我們有一個二進位制字串表示排球比賽的得分,我們需要根據以下條件找到比賽的獲勝者:

  • 有兩支隊伍互相比賽,率先獲得 15 分的隊伍獲勝,除非兩支隊伍都達到 14 分。

  • 當兩支隊伍都達到 14 分時,領先兩分的隊伍獲勝。

從給定的二進位制字串中,0 表示隊伍失分,1 表示隊伍得分。我們需要檢查隊伍是贏了還是輸了比賽。

因此,如果輸入類似於 score = "1001100110111001110011011",則輸出將是“隊伍獲勝”。

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

  • score_cnt := [0,0]

  • 對於 i 從 0 到 score 的大小,執行:

    • pos := score[i] 的 ASCII 值 - '0' 的 ASCII 值

    • score_cnt[pos] := score_cnt[pos] + 1

    • 如果 score_cnt[0] 等於 n 且 score_cnt[1] - n - 1,則:

      • 返回“隊伍失利”

    • 如果 score_cnt[1] 等於 n 且 score_cnt[0] < n - 1,則:

      • 返回“隊伍獲勝”

    • 如果 score_cnt[0] 等於 n - 1 且 score_cnt[1] 等於 n - 1,則:

      • score_cnt[0] := 0

      • score_cnt[1] := 0

      • 退出迴圈

  • i := i + 1

  • 對於 i 從 i 到 score 的大小,執行:

    • pos := score[i] 的 ASCII 值 - '0' 的 ASCII 值

    • score_cnt[pos] := score_cnt[pos] + 1

    • 如果 |score_cnt[0] - score_cnt[1]| 等於 2,則:

      • 如果 score_cnt[0] > score_cnt[1],則:

        • 返回“隊伍失利”

      • 否則,

        • 返回“隊伍獲勝”

示例

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

 即時演示

def predictWinner(score, n):
score_cnt = [0,0]
   for i in range(len(score)):
      pos = ord(score[i]) - ord('0')
      score_cnt[pos] += 1
      if (score_cnt[0] == n and score_cnt[1] < n - 1):
         return "Team lost"
      if (score_cnt[1] == n and score_cnt[0] < n - 1):
         return "Team won"
      if (score_cnt[0] == n - 1 and
         score_cnt[1] == n - 1):
         score_cnt[0] = 0
         score_cnt[1] = 0
         break
   i += 1
   for i in range(i, len(score)):
      pos = ord(score[i]) - ord('0')
      score_cnt[pos] += 1
      if (abs(score_cnt[0] - score_cnt[1]) == 2):
         if (score_cnt[0] > score_cnt[1]):
            return "Team lost"
         else:
            return "Team won"
score = "1001010101111011101111"
n = 15
print(predictWinner(score, n))

輸入

"1001010101111011101111"

輸出

Team won

更新於: 2020-08-27

191 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.