//游戏王抽卡上手概率
#include<stdio.h>
double C(int a,int b)
{
if(b==0) return 1.0;
double m=1,n=1;
for(int i=b-1;i>=0;i--)
{
m*=(a-i);
}
for(int i=b;i>0;i--)
{
n*=i;
}
return m*1.0/n;
}
double shu(int a,int b,int c,int d)
{
return C(a-c,b-d)*C(c,d)/C(a,b);
}
int main()
{
while(1)
{
printf("卡组数量:");
int a;
scanf("%d",&a);
printf("手卡数量:");
int b;
scanf("%d",&b);
printf("目标卡投入数量:");
int c;
scanf("%d",&c);
printf("期望上手数量:");
int d;
scanf("%d",&d);
printf("壶(吸毒/金满)的投入数量:");
int e;
scanf("%d",&e);
if(e==0){
printf("抽到的概率是:");
printf("%f%%\t",shu(a,b,c,d)*100);
printf("抽不到的概率是:%f%%\n",(1-shu(a,b,c,d))*100);
}
else{
printf("抽到的概率是:");
printf("%f%%\t",(shu(a,b,e,0)*shu(a,b,c,d)+(1-shu(a,b,e,0))*shu(a-1,b+1,c,d))*100);
printf("抽不到的概率是:%f%%\n", (1-(shu(a,b,e,0)*shu(a,b,c,d)+(1-shu(a,b,e,0))*shu(a-1,b+1,c,d)))*100);
}
printf("\n");
}
}