题意:
有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡。如果只剩一种汉堡,就不用抛硬币了。
求最后两个孩子吃到同一种汉堡的概率。
分析:
可以从反面思考,求最后两个孩子吃到不同汉堡的概率。
因为最后两个汉堡是不同的,所以前面的2n-2个孩子吃汉堡之前一定都是要抛硬币的。
所以,吃两种汉堡的孩子人数相等,都是n-1个。
令,对于2n个孩子吃汉堡,所求概率为1 - f(n-1)
我们还可以递推f,
#include <iostream>
#include <cstdio>
using namespace std; double a[ + ]; int main()
{
a[] = ; a[] = 0.5;
for(int i = ; i <= ; ++i) a[i+] = (double)(*i+)/(*i+)*a[i]; int T;
scanf("%d", &T);
while(T--)
{
int n;
scanf("%d", &n);
n >>= ; n--;
printf("%.4f\n", 1.0 - a[n]);
} return ;
}
代码君