在 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告