大爽Python入门练习题 29 比赛轮数

大爽Python入门练习题总目录

第二章 中期练习题 中等 第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\)

比如输入的n7,则比赛总轮数为3
具体如下

  1. 第一轮,一队轮空,6队决出3队,共4队进入下一轮。
  2. 第二轮,4队决出2队,共2队进入下一轮。
  3. 第三轮,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
原文地址:https://www.cnblogs.com/BigShuang/p/15685718.html