Take Your Seat Gym - 102222D

Take Your Seat Gym - 102222D

题意:

第一次是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;
}

猜你喜欢

转载自blog.csdn.net/qq_35975367/article/details/115440166