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;
}