我遇到了我製作的小遊戲存在的問題。Rand生成相同的數字
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int span = 100;
srand(time(0));
int TheNumber = static_cast<double> (rand()) /RAND_MAX * (span -1) +1;
cout << "You need to guess the number between 1 and " << span << endl;
int mynumber;
int numberofAttempts = 0;
do {
cout << ++numberofAttempts <<" Attempt: ";
cin >> mynumber;
if (mynumber > TheNumber)
cout <<"Lower!" << endl;
else if (mynumber < TheNumber)
cout <<"Higher!" << endl;
} while (mynumber != TheNumber);
cout << "SUCESS!!!" << endl;
return 0;
}
遊戲應該產生0-100之間的隨機數,你應該猜到了。運行這個代碼15-20次後,相同的數字甚至產生了8次(在我的例子中是2)。
我知道沒有絕對的隨機數,它使用一些數學公式或其他東西來得到一個。我知道使用srand(time(0))
使它依賴於當前時間。但是,我怎樣才能使它更「隨意」,因爲我不想讓我發現上面提到的東西。
第一次運行它的結果是11,再次運行後(猜測正確的數字後),它仍然是11,即使時間改變了。
我剛剛更新了最後一部分,猜測後(有些秒必須通過),數量仍然相同。 – Marink
將TheNumber的聲明更改爲'int TheNumber = rand()%100 + 1;' – jrok
@jrok,不好的建議。 rand()的低位比特是非常隨機的。 –