1. 程式人生 > 其它 >不重複隨機數的產生 (C++)

不重複隨機數的產生 (C++)

技術標籤: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個數,即可保證每次取得數字是不一樣的。