我試圖從理論上解決一個概率問題,然后在 C 上對其進行建模,但我的代碼輸出的概率與理論概率不同。
問題:
一枚平衡的硬幣被拋三下。計算三次投擲中恰好有兩次出現正面的概率。
回答:
樣本空間:{(H,H,H), (H,H,T), (H,T,H), (H,T,T), (T,T,T), (T,T,H ), (T,H,T), (T,H,H)}
三次投擲中恰好有兩次出現正面的概率 = 3/8
C 代碼:
#include <iostream>
#include <time.h>
#include <stdlib.h>
bool TossCoinXNumber(int x);
int TossCoin();
void CalcProbability(int x);
using namespace std;
int main()
{
srand (time(NULL));
CalcProbability(1000000);
return 0;
}
int TossCoin(){
int toss = rand() % 2;
return toss;
}
bool TossCoinXNumber(int x){
int heads=0;
int tails = 0;
for(int i = 0; i < x; i ){
if(TossCoin() == 1){
heads ;
}
else if(TossCoin() == 0){
tails ;
}
}
if(heads == 2 && tails == 1){
return true;
}
return false;
}
void CalcProbability(int x){
double probability = 0.0;
double count = 0.0;
for(int i = 0; i < x; i ){
if(TossCoinXNumber(3) == true){
count ;
}
}
probability = (count*1.0) / (x*1.0);
cout << probability;
}
代碼輸出:0.187053
這與 3/8 的理論概率不同
uj5u.com熱心網友回復:
正如n. 1.8e9-where's-my-share m.正確指出的那樣,您打TossCoin()了兩次電話。這是修復問題的修改后的代碼:
#include <stdlib.h>
#include <time.h>
#include <iostream>
bool TossCoinXNumber(int x);
int TossCoin();
void CalcProbability(int x);
using namespace std;
int main()
{
srand(time(NULL));
CalcProbability(1000000);
return 0;
}
int TossCoin()
{
int toss = rand() % 2;
return toss;
}
bool TossCoinXNumber(int x)
{
int heads = 0;
int tails = 0;
for (int i = 0; i < x; i )
{
int toss = TossCoin();
if (toss == 1)
{
heads ;
}
else if (toss == 0)
{
tails ;
}
}
if (heads == 2 && tails == 1)
{
return true;
}
return false;
}
void CalcProbability(int x)
{
double probability = 0.0;
double count = 0.0;
for (int i = 0; i < x; i )
{
if (TossCoinXNumber(3) == true)
{
count ;
}
}
probability = (count * 1.0) / (x * 1.0);
cout << probability;
}
這是我喜歡的較短的代碼:
#include <iostream>
#include <random>
using namespace std;
int main(void)
{
int tries = 1000000, count = 0;
for (int i = 0; i < tries; i)
{
int heads = 0;
for (int j = 0; j < 3; j) heads = (rand() % 2);
count = (heads == 2);
}
cout << count / float(tries) << endl;
}
在此代碼中,比較的整數結果用于遞增heads, count,因此我們沒有任何ifs。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417708.html
標籤:
