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