Hdu 4159 & COJ 1536 Indomie

简单概率题。

题目大意: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;

} 

转载于:https://www.cnblogs.com/g0feng/archive/2012/08/22/2651473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值