抵达概率的近似值我给了一个关于概率的数学问题。它是这样的:使用代码
有1000个彩票,每个有1000张门票。您决定每次购买彩票1张。你至少赢得一个彩票的概率是多少?
我能够在数学上做到这一点(到达1 - (999/1000)^ 1000),但在我的计算机上发生了一个在我的计算机上进行大量随机实验迭代的想法。所以,我输入了一些代码 - 它的两个版本是确切的,并且都是故障。
代码1:
#include<iostream>
#include <stdlib.h>
using namespace std;
int main() {
int p2 = 0;
int p1 = 0;
srand(time(NULL));
for (int i = 0; i<100000; i++){
for(int j = 0; j<1000; j++){
int s = 0;
int x = rand()%1000;
int y = rand()%1000;
if(x == y)
s = 1;
p1 += s;
}
if(p1>0)
p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}
代码2:
#include<iostream>
#include <stdlib.h>
using namespace std;
int main() {
int p2 = 0;
int p1 = 0;
for (int i = 0; i<100000; i++){
for(int j = 0; j<1000; j++){
int s = 0;
srand(time(NULL));
int x = rand()%1000;
srand(time(NULL));
int y = rand()%1000;
if(x == y)
s = 1;
p1 += s;
}
if(p1>0)
p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}
代码3(refered一些先进的文本,但我不明白大部分):
#include<iostream>
#include <random>
using namespace std;
int main() {
int p2 = 0;
int p1 = 0;
random_device rd;
mt19937 gen(rd());
for (int i = 0; i<100000; i++){
for(int j = 0; j<1000; j++){
uniform_int_distribution<> dis(1, 1000);
int s = 0;
int x = dis(gen);
int y = dis(gen);
if(x == y)
s = 1;
p1 += s;
}
if(p1>0)
p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}
现在,所有这些代码都输出相同的文本:
The final probability is = 1 Process finished with exit code 0
似乎rand()函数在循环的所有100000次迭代中都输出了相同的值。我无法解决这个问题。
我也尝试使用随机()函数,而不是函数srand()函数,但它似乎并没有工作,给奇怪的错误,如:
error: ‘randomize’ was not declared in this scope
randomize();
^
我认为随机化()已停产在更高版本的C++中。
我知道我在很多层面上都是错的。如果您能耐心地向我解释我的错误,并让我知道一些可能的更正,我将非常感激。
我明白了,这就是我在第一个代码中尝试的。我如何避免在同一个循环中无法生成新的随机数的问题?对于x和y –