python算法:篮球联赛

一,篮球联赛题目

某大学举办一次全校学生篮球联赛,
全校共n支球队,采用单循环制(每两支队之间比赛一场),
一共需要进行多少场比赛?

二,解析:

思路:
我们假设按出场顺序进行比赛
只有第一个队时,无法比赛
第二个队出场时,与1队比赛一场,可得:f(2) = 1
第三个队出场时,与1队,2队各比赛一场,可以得到:f(3) = 2
第四个队到达时,与1队,2队,3队各比赛一场,可以得到:f(4) = 3
以此类推:
第n个队到达时,与之前的n-1个队都各比赛一场,可以得到 f(n) = n-1
我们要获取的就是这些比赛次数加和

比赛次数加和:
既可以循环累加,也可以使用递归:
有两个队时的比赛总次数:f(2) = 1
有3个队时的比赛总次数:f(3) = f(2)+2
有4个队时的比赛总次数:f(4) = f(3)+3

以此类推
有n个队时的比赛总次数:f(n) = f(n-1)+n-1
由此可以得到方程式:

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/30/python-suan-fa-lan-qiu-lian-sai/
代码: https://github.com/liuhongdi/https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

三,编写代码:

1,递归函数

# 递归函数,得到比赛总场数
# n: 参与比赛的球队数
def ball(n):
    if n <= 1:     # 一支球队及以下,返回0,递归终止
        return 0
    elif n == 2:     # 两支球队,比赛1场,返回1,递归终止
        return 1
    else:     # 两支以上球队,按方程式返回比赛场数
        return ball(n-1)+n-1
n = 15
print(f"{n}支球队共需比赛{ball(n)}场")

运行结果:

15支球队共需比赛105场

2,循环

# 函数,得到比赛总场数
# n: 参与比赛的球队数
def ball(n):
    total = 0    # 初始化总场数
    for s in range(2, n + 1):     # 球队数量的范围:从2到n
        num = s-1       # 当前球队数量的比赛场数
        total += num    # 加到总场数中
    return total
n = 15
print(f"{n}支球队共需比赛{ball(n)}场")

运行结果:

15支球队共需比赛105场
QR:python算法:篮球联赛

发表回复