大爽Python入门练习题 2-9 比赛轮数
第二章 中期练习题 中等 第9题
题目
出处: leetcode-1688: Count of Matches in Tournament
已将问题简化处理,原题要求配对次数,这里只求比赛轮数。
简介
实现一个函数get_turn_count(n)
,
接受一个整数n
作为参数,
返回n
个队伍比赛决出第一名时,比赛的轮数。
(每一轮两两一组比较,胜者进入下一轮,直至决出一名最终胜利者,即第一名)。
补充:默认n大于1。
详细说明
-
如果当前队伍数
n
是 偶数 ,那么每支队伍都会与另一支队伍配对。
下一轮队伍数量为\(\frac{n}{2}\) -
如果当前队伍数
n
为奇数,那么将会随机轮空并晋级一支队伍, 其余的队伍配对。
下一轮的队伍数量为\(\frac{n-1}{2} + 1\)
比如输入的n
为7
,则比赛总轮数为3
具体如下
- 第一轮,一队轮空,6队决出3队,共4队进入下一轮。
- 第二轮,4队决出2队,共2队进入下一轮。
- 第三轮,2队决出1队,决出第一名,比赛完毕。
示例
示例一
r = get_turn_count(7)
print(r)
输出为
3
示例二
r = get_turn_count(17)
print(r)
输出为
5
分割线
本小段没有实际意义,
仅用于分隔题目和答案。
防止学生无意中直接看到答案,
影响思路。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
答案
def get_turn_count(n):
count = 0
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = (n-1) // 2 + 1
count += 1
return count