首页 > 代码库 > 51nod1639(组合数学)

51nod1639(组合数学)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639

 

题意:中文题诶~

 

思路:组合数学

n根鞋带要组成一个环,那么显然与连成一根鞋带之前不成环是冲要条件;

假设当前还剩下 i (i>1) 根鞋带,要从中选择两根鞋带头连接后不成环的概率为 pi = 不成环的选择方法数 / 所有选择方法数

所有方法数 = C(2*i, 2) = 2 * i * (2*i - 1) / 2 = i * (2*i - 1)

成环的方法数 = C(i, 1) = i

不成环的方法数 = 所有方法数 - 成环方法数 = i * (2*i - 2)

所以 pi = 不成环的选择方法数 / 所有选择方法数 = (2*i - 2) / (2*i - 1)

由此得到了i > 1时的 pi;

对于每一个 i 的情况都可以看作是相互独立的事件,那么显然有 p = ∑pi = ∑(2*i - 2) / (2*i - 1) (2 =< i <= n);

 

代码:

技术分享
 1 #include <iostream>
 2 #include  <stdio.h>
 3 using namespace std;
 4 
 5 int main(void){
 6     int n;
 7     double p=1;
 8     scanf("%d", &n);
 9     for(int i=n; i>1; i--){
10         p*=(double)(2*i-2)/(2*i-1);
11     }
12     printf("%.6lf\n", p);
13     return 0;
14 }
View Code

 

51nod1639(组合数学)