|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目
某电影院的电影票出售方式很特别,它们只准备了两种电影票。
A 类票——免费球票
B 类票——双倍价钱球票。
购买时由工作人员通过掷硬币决定,投到正面的买 A 类票, 反面的买 B 类票。由于是市场经济,主办方不可能倒贴钱,所以他们总是准备了同样多的 A 类票和 B 类票。
你和你的朋友十分幸运的排到了某场精彩电影的最后两个位置。
这时工作人员开始通过硬币售票。不过更为幸运的是当工作人员到你们面前时他发现已无需再掷硬币了,因为剩下的这两张票全是免费票。
你和你的朋友在欣喜之余,想计算一下排在队尾的两个人同时拿到一种票的概率是多少(包括同时拿 A 类票或 B 类票)
假设工作人员准备了 2N张电影票,其中 N 张 A 类票,N 张 B 类票,并且排在队伍中的人每人必须且只能买一张电影票(不管掷到的是该买 A 还是该买 B)。
输入
输入文件仅一行,包含整数 2N,代表 A、B 类票各 N 张。其中(0≤N≤1250) ,N 为整数。
输出
输出只包含一个数,为拿到同一种票的概率,精确到小数点后 4 位。
样例
输入:256
输出:0.9500
代码如下:
- import random
- shuffle_times =1000000
- total_piao =int(input())
- balls = [1]*(total_piao//2) + [2] *(total_piao//2)
- for _ in range(shuffle_times):
- random.shuffle(balls)
- same_balls = sum([1 for i in range(len(balls)-1) if balls[i] ==balls[i+1]])
- probability = same_balls / (total_piao-1)
- if total_piao==0:
- print("0.0000")
- else:
- print("%.4f" % probability)
复制代码
网上的动态规划的解法,我给你转成PY代码,原理我是看不懂 啊
- dp=[]
- n=256
- for i in range(n+1):
- dp.append([0])
- for j in range(n+1):
- dp[i].append(0)
- dp[0][0]=1
- for i in range(1,n+1):
- dp[i][0]=dp[i-1][0]*0.5
- for j in range(1,n//2+1):
- if j==n//2:
- dp[i][j]=dp[i-1][j-1]*0.5+dp[i-1][j]
- else:
- dp[i][j]=dp[i-1][j-1]*0.5+dp[i-1][j]*0.5
- print((dp[n-2][n//2])*2)
复制代码
|
|