產生m個1 m的不重複隨機數

2021-07-02 19:19:35 字數 617 閱讀 5807

方法一:逐個產生這些隨機數,每產生乙個,都跟前面的隨機數比較,如果重複,就重新產生。

方法二:按順序產生這些數,但隨機產生它們的位置,用隨機產生的位置將原序列置亂。

例如下面產生100個100以內不重複隨機數的**:

int a[100];

for(i=0; i<=99; ++i) a[i]=i;

for(i=99; i>=1; --i) swap(a[i], a[rand()%i]);

第2行按順序用0到99填滿整個陣列;

第3行是隨機產生乙個0到m-2的陣列下標,把這個下標的元素值跟m-1下標的元素值交換,一直進行到下標為1的元素。

**:

#include"stdio.h"

#include#includevoid swap(int &a,int &b);

int main()

return 0;

}void swap(int &a,int &b)

執行結果:

參考:

高效產生m個n範圍內的不重複隨機數(m n

如何產生不重複的隨機數?最容易想到的方法,是逐個產生這些隨機數,每產生乙個,都跟前面的隨機 數比較,如果重複,就重新產生。這是個很笨的方法,且比較次數呈線性增長,越往後次數越多。其實這些 比較是多餘的,完全可以不進行比較,只要反過來,按順序產生這些數,但隨機產生它們的位置。例如下 面產生100個10...

產生n個不重複的隨機數

這是最容易想到的方法,逐個產生這些隨機數,每產生乙個,都跟前面的隨機數比較,如果重複,就重新產生。可以使用hashtable或陣列標記,這種方法效率比較低,且比較次數呈線性增長,越往後次數越多。所謂 篩選法 就是根據要產生隨機數指定的範圍 起始數必須小於終止數 將這些數全部裝入乙個陣列,然後利用系統...

高效產生不重複的隨機數

purpose 生成隨機的不重複的測試資料 1000w資料量,要保證生成不重複的資料量,一般的程式沒有做到。但,本程式做到了。include include include include include include define size 10000000 int num size void ...