题目大意:有n个牛肉汉堡和n个鸡肉汉堡给2n个孩子吃。每个孩子在吃之前都要抛硬币,正面吃牛肉汉堡,反面吃鸡肉汉堡。如果剩下的所有汉堡都一样,则不用抛硬币。求最后两个孩子吃到相同汉堡的概率。
正面不好思考,考虑最后两个孩子吃不同汉堡的概率。则根据概率相关知识,P(n) = (1 / 2) ^ (2n - 2) * C(n - 1, 2n - 2),由P(n)和P(n+1)的关系得到:P(n+1) / P(n) = (2n - 1) / 2n;由P(1) = 1可递推得到结果打表。
#include <iostream>
#include <cstdio>
using namespace std;
double res[51200];
void init()
{
res[1] = 1;
for (int i = 1; i <= 50000; ++i)
res[i + 1] = res[i] * (2 * i - 1) / (2 * i);
}
int main()
{
init(); int kase, n; cin >> kase;
while (kase--){
cin >> n;
printf("%.4f\n", 1 - res[n / 2]);
}
return 0;
}