Take Your Seat Gym - 102222D【数学+概率】

题意:

Duha 是 \(1\) 号乘客,且只有他丢失了他的机票,其他乘客没有。
在去的时候,他是第一个上飞机的,而且他随机选择一个座位,后面的乘客如果发现座位被占,也会随机选择一个座位。求最后一个乘客坐在自己位置上的概率。
回来的时候,上飞机的顺序是随意的,问最后一个乘客坐在自己位置上的概率。
数据范围:\(1\leq n,m \leq 50\)

分析:

第一问:
\(n=1:p[1]=1;\)

\(n=2:p[2]=\frac{1}{2}+0=\frac{1}{2};\)

\(n=3:\frac{1}{3}+\frac{1}{3}*p[2]+\frac{1}{3}*0=\frac{1}{2};\)

\(n=4:\frac{1}{4}+\frac{1}{4}*p[2]+\frac{1}{4}*p[3]+\frac{1}{4}*0=\frac{1}{2};\)

\(p[n]=\frac{1}{n}+\frac{1}{n}*p[2]+\frac{1}{n}*p[3]+...+\frac{1}{n}*p[n-1]+\frac{1}{n}*0=\frac{n}{2n}=\frac{1}{2};\)

第二问:

在第一问的基础上进行推导;

\(p=\frac{1}{m}*(1+\frac{1}{2}*(m-1))=\frac{m+1}{2m}\)

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t,n,m,cot=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        double ans1=0.5,ans2=1.0*(m+1)/(2*m);
        if(n==1)
            ans1=1;
        printf("Case #%d: ",++cot);
        printf("%.6f %.6f\n",ans1,ans2);
    }
    return 0;
}

posted @ 2020-03-05 19:19  xzx9  阅读(136)  评论(0编辑  收藏  举报