【发布时间】:2012-04-29 07:23:25
【问题描述】:
这是昨天在 interviewstreet 结束的编程竞赛中的一个问题:
爱丽丝和鲍勃玩游戏。第 i 轮 (i >= 1) 的操作如下:
- 爱丽丝付给鲍勃 2 * i - 1 美元,
- 爱丽丝扔了一枚有偏见的硬币,
- 如果硬币的结果是连续 k 轮正面,则游戏停止,否则游戏继续。
给定 k 和投掷结果为正面 (p) 的概率,您的程序应该找到 Alice 支付给 Bob 的预期美元数,以及预期的回合数。
输入
输入的第一行包含测试用例的数量(T
输出
对于每个测试用例,打印两个整数。第一个数字是 期望游戏轮数的整数部分,第二个 number 是 Alice 期望的美元数的整数部分 付钱给鲍勃。
示例输入
3
0.6 1
1 20
0.80 8
样本输出
1 3
20 400
24 976
我得到了问题的第一部分,即预期的游戏轮数。我用下面的代码得到了它
if __name__ == '__main__':
t = int(raw_input())
while t :
t -= 1
temp = str(raw_input())
p,k = temp.split(' ')
p = float(p)
k = int(k)
#print p,k
ans = 0.0
num = k * (p**k)
den = 1
q = 1.0 - p
for N in range(1,k+1):
den = den - ((p**(N-1))*q)
num = num + (N*(p**(N-1))*q)
#print (N*(q**N))
print int(num/den)
但问题的第二部分仍然让我感到困惑,即 Alice 支付给 bob 的预期美元数。如何计算预期收益?
【问题讨论】:
-
查看泊松分布。
-
如果您知道预期的轮数,那么计算 Alice 支付多少(知道她每轮支付多少)不应该是微不足道的吗?我是不是太天真了?
-
一开始我也是这么想的。但看看这些例子,它似乎并不那么微不足道。对于第二个输入,预期轮数是 24,但预期收益是 976。如果按照 24 轮计算收益是 576,这是错误的。
-
预期回报不是预期轮数(576)的回报。它是(支付乘以该支付的概率)的总和。支付时的最小可能轮数为 k,支付的概率为 p^^k。
标签: python puzzle probability