1、编写一个函数C(n,m)求解组合数,并测试。要求用递归函数和非递归函数两种方式实现。
组合数计算公式:C(n,m) = C(n-1, m) + C(n-1, m-1)
其中:C(n,n)=1 C(n,0)=1
import math
def C(n,m):
value = math.factorial(n)/(math.factorial(m)*math.factorial(n-m))
return value
print(C(4,2))
print(C(4,4))
print(C(4,0))
def CombinationNum(n,m):
if m == 0 or n == m:
return 1
return CombinationNum(n-1,m-1)+CombinationNum(n-1,m)
print(CombinationNum(4,2))
print(CombinationNum(4,4))
print(CombinationNum(4,0))
2、编写一个函数paint(n),根据输入参数n(行数)不同,输出下面图形(n=4),并测试。
*
***
*****
*******
def paint(n):
for i in range(1,n+1):
a = 2*i-1
print('{0:^100}'.format('*' * a))
paint(4)
3、有n个乒乓球运动员打淘汰赛,编写函数计算至少需要多少场比赛才能决出冠军,并测试。提示:可以用递归函数实现。(淘汰赛是指体育比赛和其它各种比赛中的一种赛制,在这种赛制中赛员两两相对,输一场即淘汰出局。每一轮淘汰掉一半选手,直至产生最后的冠军。)
def bisai(n):
if n==1:
return 0
elif n%2 != 0:
n=n-1
return 1+bisai(n)
else:
return n//2+bisai(n//2)
print(bisai(4))
4、从以下三题中任选一题完成:
(2)轮盘抽奖是比较常见的一种游戏,在轮盘上有一个指针和一些不同颜色、不同面积的扇形,用力转动轮盘,轮盘慢慢停下后依靠指针所处的位置来判定是否中奖以及奖项等级。假设共设一等奖、二等奖和三等奖这3个价值的奖品。把轮盘从0°-360°划分为3个区域,其中[0°,30°)对应一等奖,[30°,108°)对应二等奖,[108°,360°)对应三等奖。使用0-360的随机数表示消费者转动轮盘后指针所处的位置。编写函数playGame(),模拟轮盘抽奖过程。编程模拟该游戏全过程,并试玩10000次,记录每个奖项的中奖次数。
提示:用字典实现
import random
def playGame():
a = random.randint(0,360)
if 0<=a<30:
print('一等奖')
return '一等奖'
elif 30<=a<108:
print('二等奖')
return '二等奖'
else:
print('三等奖')
return '三等奖'
def main():
b = []
for i in range(10000):
b.append(playGame())
a=[i for i in range(1,10001)]
c = dict(zip(a,b))
if __name__ == '__main__':
main()