#刷题交流# 第15天:比赛配对问题
这个问题本质上是要模拟一个淘汰赛的过程,直到剩下唯一的一支获胜队伍。在每一轮中,根据队伍数的奇偶性进行配对,直到队伍数降到 1 为止。我们需要统计总共进行的比赛次数。
思路
1. 奇偶性判断:
○ 如果队伍数是偶数,则每两支队伍配对,进行n/2场比赛,剩下的队伍数也会减少为n/2。
○ 如果队伍数是奇数,则有一支队伍轮空,其他队伍配对,进行(n-1)/2场比赛,剩下的队伍数会变为 (n-1)/2 + 1(即(n+1)/2)。
2. 比赛次数累计:
○ 每进行一轮比赛时,都需要根据当前队伍数判断进行多少场比赛,并更新剩下的队伍数,直到剩下的队伍数为 1。
3. 结束条件:
○ 当队伍数剩下 1 时,比赛结束。

核心代码:
while n > 1:
if n % 2 == 0:
# 如果队伍数是偶数,每两支队伍配对
matches += n // 2
n //= 2
else:
# 如果队伍数是奇数,轮空一支队伍,其他队伍配对
matches += (n - 1) // 2
n = (n - 1) // 2 + 1

加油,15天,已经过半了!!🌟🌟
展开
评论