一,篮球联赛题目
某大学举办一次全校学生篮球联赛,
全校共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
说明:作者:刘宏缔 邮箱: [email protected]
三,编写代码:
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 - 1
n = 15
print (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 total
n = 15
print (f "{n}支球队共需比赛{ball(n)}场" )
|
运行结果:
15支球队共需比赛105场
标签:个队,比赛,python,算法,篮球联赛,ball,球队,com
From: https://www.cnblogs.com/architectforest/p/18195698