题意:
第一次是n个人坐飞机,按照1到n的顺序登机,第一个人登机牌丢了,他随机做一个座位,2到n个人上来按照自己的登机牌坐座位,如果他的座位被坐了,就在随机找一个座位,否则就做自己的座位,问第n个人坐对的概率是多少?
第二次跟第一次的区别是不是从1-n按顺序上车了,而是随机找人上车,1号还是丢了登机牌,问问第n个人坐对的概率是多少?
题解:
概率题最容易把自己算懵
第一问:
如果n = 1,概率是1(肯定能坐对)
如果n = 2,有两个选择,第一个人选对,最后一个人就只能做错,反之,所以概率为1/2
如果n = 3,
1.第一个人选对了位置,后面就都坐对了,概率为1/3
2.第一个人选了第2个位置,第二个人上来就会随机选择,只有两个位置可以选(1/2),所以最后一个人坐对的概率是1/3 * 1/2
3.如果第一个人选了第三个位置,则最后一个人一定坐不上对的位置(因为上来就被占了)。概率为0
总概率为 = 1/3 +1/3 * 1/2+0=1/2
…
总结归纳:P(n)=1/n + 1/n * P(n-1) +1/n * P(n-2)+…1/n * P(2) + 0 =1/2
所以总结,n = 1时,p=1,其他p=1/2
第二问:
(m为总人数)
如果一号是最后一个上车的,那么第n个人一定坐对,否则,如果是第i个上车的,那么前n-i个人肯定会坐在自己的位置上,问题又回到了1号身上,他又相当于第一个上车的,所以只要1号不是最后一个上车的,概率总是1/2,所以是
1/m+(m-1)/m * 1/2 = (m+1)/(2m)
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int t,n,m,cas=1;
cin >> t;
while(t--)
{
double ans=0.5;
cin >> n >> m;
if(n==1) ans=1;
printf("Case #%d: %.6f %.6f\n",cas++,ans,1.0*(m+1)/(2*m));
}
return 0;
}