限次连续若干同色球概率算法

问题:
对 n 种不同颜色的若干球,一次取用一次,记录球色并放回。计算在 p 次之内至少连续 q 个球同色的概率

两法,均为计算机模拟,一种是传统的暴力枚举,第二种,则巧妙利用了随机数……

double CalcProbability ( double dn, int p, int cq, int Q ) { double prob; if ( p && cq ) prob = dn * CalcProbability ( dn, p - 1, cq - 1, Q ) + ( 1 - dn ) * CalcProbability ( dn, p - 1, Q - 1, Q ); else if ( cq ) prob = 0; else prob = 1; return prob; } double Probability ( int n, int p, int q ) { return CalcProbability ( 1.0 / n, p - 1, q - 1, q ); }

double Probability ( int n, int p, int q, int m ) { int qq = 0; int mm = 0; int c = 0; int l = 0; int j; int i; while ( mm < m ) { for( i = 0; i < p; i++ ) { j = (int) ceil ( (double) rand() / ( RAND_MAX + 1 ) * n ); qq = ( j == c ) ? ( qq + 1 ) : 1; c = j; if ( q == qq ) break; } l++; mm = ( q == qq ) ? ( mm + 1 ) : mm; qq = 0; c = 0; } return 1.0 * m / l; }

你可能感兴趣的:(c,算法,qq)