python算法:握手问题
一,题目
小明在家中举办派对,请邀请好友来参加,
来参加宴会的每两个人之间要握手,而且是仅握手一次,
则当人数为n时总共需要握手多少次?
二,解析
1,思路:
我们假设每个人到达后按先后顺序握手:
这样从人数最少时开始分析:
开始时会场中只有小明,是参会的第一个人,
假设第二个人到达时,与小明握手1次,可得:f(2) = 1
第三个人到达时,与小明,第2握手各1次,可以得到:f(3) = 2
第四位客人到达时,与小明,第2,第3握手各1次,可以得到:f(4) = 3
以此类推:
第n个人到达时,与屋内的n-1个人都握手1次,可以得到 f(n) = n-1
我们要获取的就是这些握手次数加和
2,设计:
握手次数加和:
既可以循环累加,也可以使用递归:
有两个人时的握手次数:f(2) = 1
有3个人时的握手总次数:f(3) = f(2)+2
有4个人时的握手总次数:f(4) = f(3)+3
…
以此类推
有n个人时的握手总次数:f(n) = f(n-1)+n-1
由此可以得到方程式:

三,编写代码:
1,使用递归函数
|
1
2
3
4
5
6
7
8
9
10
11
|
# 函数,得到握手总次数# n: 参与握手的人数def shake(n): if n <= 1: return 0 elif n == 2: return 1 else: return shake(n-1)+n-1n = 12print(f"{n}个人共需握手{shake(n)}次") |
运行结果:
12个人共需握手66次
2,使用循环
|
1
2
3
4
5
6
7
8
9
10
|
# 函数,得到握手总次数# n: 参与握手的人数def shake(n): total = 0 # 初始化总次数 for s in range(2, n + 1): # 人数的范围:从2到n num = s-1 # 当前人数的握手次数 total += num # 加到总次数中 return totaln = 12print(f"{n}个人共需握手{shake(n)}次") |
运行结果:
12个人共需握手66次

浙公网安备 33010602011771号