1月,Interviewstreet进行了第二次CodeSprint,其中包括以下问题。程序化答案已发布,但不包含统计解释。
(您可以使用Google信用登录到Interviewstreet网站,然后从此页面转到Coin Tosses问题,以查看原始问题和已发布的解决方案。)
投币
您有一个不偏不倚的硬币,您想要一直扔下去,直到获得N个连续的正面。您已经抛硬币了M次,令人惊讶的是,所有抛硬币都导致了正面的损失。
在您连续获得N个脑袋之前,需要进行的额外抛球次数是多少?
输入:
第一行包含个案T的数量。接下来的T行每一行包含两个数字N和M。
输出:
输出T行,其中包含相应测试用例的答案。打印答案,精确到小数点后两位。
样本输入:
4
2 0
2 1
3 3
3 2
样本输出:
6.00
4.00
0.00
8.00
示例说明:
如果N = 2且M = 0,则需要不断掷硬币,直到连续获得2个头。不难证明平均需要掷6枚硬币。
如果N = 2且M = 1,则需要连续2个头,并且已经有1个头。无论如何,都需要再次抛掷。在第一个折腾中,如果您有头脑,那就完成了。否则,您需要重新开始,因为连续计数器会重置,并且您需要不断掷硬币,直到获得N = 2个连续头。因此,预期的抛硬币次数为1 +(0.5 * 0 + 0.5 * 6)= 4.0如果N = 3且M = 3,您已经有3个头,因此您不再需要抛硬币。
我想出的所有数学方程式都对上面列出的样本输入数据有正确的答案,但是对于所有其他输入集(都不知道)是错误的。他们的程序化解决方案似乎与我尝试采用方程式方法解决问题的方式大不相同。有人可以解释一下如何提出方程式来解决这个问题吗?