Description
有n根鞋带混在一起,现在重复n次以下操作:随机抽出两个鞋带头,把它们绑在一起。可以想象,这n次之后將不再有单独的鞋带头,n条鞋带系成了一些环。那么有多大概率刚好所有这些鞋带只形成了一个环?
Input
仅一行,包含一个整数n (2<=n<=1000)。
Output
输出一行,为刚好成环的概率。
Input示例
2
Output示例
0.666667
解题思路
假设ans[i-1]为i-1根鞋带成环的概率,现在要加入第i根鞋带,为使之成环那么这根鞋带可以放在i-1根鞋带之间的任意一个位置,且有两个鞋带头即每个位置有两种选择,则共有2*(i-1)中选择。此时,对于总的情况来说,增加了第i根鞋带独自成环的情况,即共有2*(i-1)+1中情况,则ans[i]=ans[i−1]∗2∗(i−1)2∗i−1。
代码实现
#include<bits/stdc++.h>
using namespace std;
#define maxn 1007
double ans[maxn];
int main()
{
int n;
cin>>n;
ans[1]=1.0;
for(int i=2;i<=n;i++)
ans[i]=ans[i-1]*2*(i-1)/(2*i-1);
cout<<ans[n]<<endl;
return 0;
}
本文探讨了n根鞋带通过随机捆绑形成环的概率问题,给出了一种递推的解题思路,并通过C++代码实现了该算法。

2628

被折叠的 条评论
为什么被折叠?



