我正在尝试计算HHHHHHTTTTTT
100 万次翻转中字符串的出现次数。对于硬币翻转,我使用了一个简单的 std::rand() % 2。下面的代码。在数学上,预期的答案是
(10^6 - 12 + 1) / 2^12 = 244
我从一本概率教科书中得到了这个结果。但是我的代码始终只得到大约一半,即大约 122。这是使用 std::rand() 作为硬币翻转算法的问题,还是我的代码中有错误?
#include <iostream>
#include <cstdlib>
#include <vector>
#include <ctime>
using std::vector;
bool coin_flip(){
return std::rand() % 2;
}
int count_string(int n, const vector<bool>& s){
int k=0, res=0;
for(int i=0; i<n; i++){
if(coin_flip()==s[k]){
k++;
if(k==s.size()){
res++;
k=0;
}
}else{
k=0;
}
}
return res;
}
int main(){
std::srand(std::time(0));
vector<bool> v(12);
const int a[12] = {1,1,1,1,1,1,0,0,0,0,0,0};
for(int i=0; i<12; i++){
v[i] = a[i];
}
std::cout << count_string(1000000, v) << '\n';
return 0;
}