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,递归函数
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
 | 
# 递归函数,得到比赛总场数# n: 参与比赛的球队数def ball(n):    if n <= 1:     # 一支球队及以下,返回0,递归终止        return 0    elif n == 2:     # 两支球队,比赛1场,返回1,递归终止        return 1    else:     # 两支以上球队,按方程式返回比赛场数        return ball(n-1)+n-1n = 15print(f"{n}支球队共需比赛{ball(n)}场") | 
运行结果:
15支球队共需比赛105场
2,循环
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
# 函数,得到比赛总场数# n: 参与比赛的球队数def ball(n):    total = 0    # 初始化总场数    for s in range(2, n + 1):     # 球队数量的范围:从2到n        num = s-1       # 当前球队数量的比赛场数        total += num    # 加到总场数中    return totaln = 15print(f"{n}支球队共需比赛{ball(n)}场") | 
运行结果:
15支球队共需比赛105场
                    
                
                
            
        
浙公网安备 33010602011771号