题目描述
有n个绳子,进行n次操作,每次操作随机选取某两个绳子的一段并接起来,有可能一条绳子成环(不再被选取),也有可能两根绳子合为一根,问最后所有绳子成一个环的概率
思路
假设现在有n条
第一次选取哪都可以
第二次只需要不选第一次选的那一根的另一端即可
则此次选取概率为
(
n
−
1
)
/
n
(n - 1) / n
(n−1)/n
每次操作少一根绳子(两端)
答案显而易见(xyx )
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a, b, n;
long double Ans;
int main()
{
scanf("%d", &n);
a = 2, b = 3;
Ans = 1.0;
for(int i = 2; i <= n; ++i)
{
Ans = Ans * (long double)a / (long double)b;
a += 2, b += 2;
}
printf("%.6Lf", Ans);
return 0;
}