不重複隨機數的產生 (C++)
阿新 • • 發佈:2020-12-14
技術標籤:C++
有時候演算法對產生的隨機數有一定的要求,如產生的隨機數不重複。當採集的範圍比較大時,如[1,1000]之間取3個數,則使用rand()函式,產生的數字基本不存在重複。但是若在[1,5]之間產生3個隨機數,則是有非常大的概率會產生隨機數的。這時可使用如下程式碼產生不重複的隨機數字
#include< iostream> #include< stdio.h> #include< stdlib.h> #include< time.h> #include<vector> #include<algorithm> using namespace std; void randperm(int Num) { vector<int> temp; for (int i = 0; i < Num; ++i) { temp.push_back(i + 1); } random_shuffle(temp.begin(), temp.end()); for (int i = 0; i < temp.size(); i++) { cout << temp[i] << " "; } } void main() { srand((int)time(0)); randperm(10); system("pause"); }
其中random_shuffle()函式,是對陣列進行隨機排序,即若陣列是10維度,進行排序後還是10維度,但是順序是亂的,並且每次是不一樣的。
上圖為隨機執行3次的結果,可見3次的結果都是不一樣的。取前面3個數,即可保證每次取得數字是不一樣的。