简单概率题。

题目大意:Amjad去买菜,在他的前面有n人,Indomies份,他需要买到名为Indomie的菜,问这种可能的概率是多少?

 

思路:假设共有i人不买Indomie,则不买Indomie的方案有C(n,i)*2^n-i; //其他的人去买Rice或者Sugar.

以购买Indomie的份数分类,则所有的方案是 S1 = A0+A1+A2+A3+A4……As;

而还有剩余的Indomie的方案是S2 = A0+A1+A2+A3+A4…….As-1;

 

所以,概率就是S1/S2%。注意要考虑s>ns == 0的情况。 

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

const int SIZE = 101;
int N, S;
__int64 pow2[SIZE];

void init()    //2的幂
{
    int s = 1;
    pow2[0] = 1;
    for(int i = 1; i <= 50; i++)
    {
        pow2[i] = pow2[i-1]*2;
    }
    return ;
}


double PAC(int n, int m)               //Permutation and Combination,注意要用double
{
    double s = 1, i; 
    for(i = 0; i < m; i++)
        s *= (n-i)/(i+1);
     return s;
}


int main()
{
    int i, j;
    int n, s;
    init();
    while(~scanf("%d%d", &n, &s))
    {
        double sum1 = 0, sum2 = 0;
        if(s == 0)                                 // s == 0
        {
            printf("0.00000\n");
            continue;
        }
        if(s > n)                                  // s > n
        {
            printf("100.00000\n");
            continue;
        }
        for(i = 0; i <= s; i++)
        {
            sum1 += PAC(n, i)*pow2[n-i];
            if(i == s-1)
            {
                sum2 = sum1;
            }
        }
        printf("%.5lf\n"100.0*sum2/sum1);
    }
    return 0;

} 

posted on 2012-08-22 21:07  有间博客  阅读(190)  评论(0编辑  收藏  举报