抵達概率的近似值我給了一個關於概率的數學問題。它是這樣的:使用代碼
有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 –