牛客算法-幸運概率

參考:

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章