參考:
https://blog.csdn.net/romeo12334/article/details/104571043/
題目描述:
已知,1000個硬幣裏有10個金幣。隨機的取出n個硬幣,則取出硬幣裏有金幣的概率是多少?
輸入描述:
硬幣數n,n爲小於1001的自然數
輸出描述:
取出硬幣裏有金幣的概率值,小數點後保留6位小數:
例如:輸入1時,爲0.010000:輸入999時,爲1.000000
思路:通過先求取取出硬幣裏沒有金幣的概率,再通過1減去即可得出,謝謝我的大佬室友[超超同學],幫我化簡公式,省了求階乘和求組合公式帶來的超範圍問題
#include <iostream>
using namespace std;
double pro(int number);
int main()
{
float result=1;
int number;
cout <<"請輸入取出硬幣個數:";
cin>>number;
if(number<0){
printf("%0.6f",0);exit(0);
}
if(number>=991){
printf("%0.6f",result);exit(0);
}
result = pro(number);
printf("%0.6f",result);
}
double pro(int number)
{
double a1=1,a2=1;
if(number<=10){ //小於10沒有交叉項
for(int index=0;index<number;index++){
a1 *=(990-index);
a2 *=(1000-index);
}
}else{ //大於10存在交叉項,可以約分
for(int index=0;index<10;index++){
a1 *=(990-number+index);
a2 *=(1000-number+index);
}
}
return 1-a1/a2;
}