题目大意:有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 ", 1 - res[n / 2]); } return 0; }