LQX的作业

B - LQX的作业
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

LQX在做作业时遇到一个难题不会做,请你帮她计算一下:在N个独立地分布于0和1之间的随机变量排为非递减顺序之后,这些变量中第M个小于等于x的概率是多少?

Input

第一行一个整数T(T<=1000),表示有T组数据。

每组数据一行,依次是N M x(1<=M<=N<30, 0<x<1),以空格隔开。

Output

每组数据对应一行输出,即概率是多少,四舍五入保留4位小数。

Sample Input

3
1 1 0.3
2 1 0.5
2 2 0.8

Sample Output

0.3000
0.7500
0.6400
这是典型的概率问题。题目含义为将C(n,i)*pow(x,i)*pow((1-x),(n-i))(i从0变到m)
解法1:
#include<stdio.h>
#include<math.h>
double C(int n,int m)
{
    int a=0;
    double sum=1;
    for(int i=n;a!=m;i--,a++)
        sum=sum*i;
    for(int i=1;i<=m;i++)
        sum=sum/i;
    return sum;
}
int main()
{
    int q;
    scanf("%d",&q);
    while(t--)
    {
        int n,m;
        double x,sum=0;
        scanf("%d%d%lf",&n,&m,&x);
        for(int i=m;i<=n;i++)
            sum+=C(n,i)*pow(x,i)*pow((1-x),(n-i));
        printf("%.4lf\n",sum);
    }
    return 0;
}
上面的是从一个学长哪儿借鉴的,下面这个方法虽然也能解答,但老是错,不明白,恳请大神指点!!
解答2:
#include<stdio.h>
#include <math.h>
int main ()
{
    int a,n,m,i,j;
    double d,s;
   int o;
    int t;
    scanf("%d",&a);
    while(a--)
    {
        s=0.0;
        scanf("%d%d%lf",&n,&m,&d);
        t=n-m;
        for(i=0;i<=t;i++)
        {
            o=1;
            for(j=1;j<=i;j++)
            {
                o=o*(n-j+1)/j;
            }
            s=s+o*pow((1.0-d),i)*pow(d,(n-i));

        }
        printf("%.4f\n",s);

    }
    return 0;
}


 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值