用蒙特卡罗的思路手撕12生肖问题
'''
Time: 2022/10/14 15:02
Author: xin麒
File: problem3.py
3.集齐十二生肖卡问题:某餐厅开展集齐十二生肖卡活动,
顾客每消费一次,随机发给一张生肖卡。如果顾客集齐十二生肖卡,
则可以免费消费一次。编写Python代码,应用蒙特卡罗方法(Monte
Carlo Method)
来估计平均消费多少次可以集齐一次十二生肖卡。
'''
import random
import numpy as np
def solution(number):
N = int(number)
print("《=============样本数初始值:", N, "====================")
resultList = []
list = [0 for i in range(12)]
for i in range(N):
list[random.randint(0, 11)] += 1
flag = 0
for i in list:
if(i == 0):
flag = 1
break
if(flag == 0):
resultList.append(sum(list))
list = [0 for i in range(12)]
result = np.mean(resultList)
print("样本为", N, "时 平均消费", result, "次可以集齐一次十二生肖卡")
print("=============统计结束====================》")
if __name__ == '__main__':
number = 1
for i in range(2,9):
number = 10**i
solution(number) # 结果为37左右