亂數練習:擲(六面)骰子的機率模擬程式。
本文以C++實作執行。
使用C/C++亂數函式必須宣告stdlib.h或cstdlib,使用的時候直接呼叫rand()即可。
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main() {
const int arraysize = 7;
int dice[arraysize] = { 0 };
for (int i = 0; i < 60000; i++)
{
dice[1 + rand() % 6]++;
}
cout << "Face" << setw(13) << "Frequency" << endl;
for (int j = 1; j < arraysize; j++)
{
cout << setw(4) << j << setw(13) << dice[j]<<endl;
}
system("pause");
return 0;
}
執行結果如下:
上述程式執行幾次之後會發現,每次亂數產生的結果都一樣,那是因為沒有設定亂數種子。
因為C/C++的內建亂數是使用數學公式來計算,所以會有亂數的初始值,也就是亂數種子。亂數種子就是給亂數產生的公式初始值,如果不設定的話通常亂數種子初始值為0。
也因此我們可以使用一樣是定義在stdlib.h或cstdlib的srand()的函數來改變一開始的亂數值。srand()需要一個參數當作是種子好用來產生一個新的亂數序列,通常我們用目前的時間來傳入,也就是定義在time.h或ctime中的time()函數。
完整程式碼如下:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main() {
srand(time(0));
const int arraysize = 7;
int dice[arraysize] = { 0 };
for (int i = 0; i < 60000; i++)
{
dice[1 + rand() % 6]++;
}
cout << "Face" << setw(13) << "Frequency" << endl;
for (int j = 1; j < arraysize; j++)
{
cout << setw(4) << j << setw(13) << dice[j] << endl;
}
system("pause");
return 0;
}
執行結果如下:
有夢最美 築夢踏實
活在當下 認真過每一天
我是阿夢 也是Ace