如何高效地產生多個不重複的隨機數

2022-06-11 07:21:08 字數 850 閱讀 6777

型別一: 完全範圍內的隨機數

1

int a[100];2

3//1.初始化:按序列號依次賦值

4for(int i=0; i<=99; ++i)58

//2.生成不同的隨機數序列

9for(int i=99; i>=1; --i)

10

上面這段**只需要遍歷一次就可以產生這100個不重複的隨機數. 

型別二: 部分範圍內的多個不同的隨機數

1

void

generatediffnumber(int *diff,int maxn,int num)212

13//

2.產生num個不同的數

14for (int i = 0; i < num; i++)

15 while (tmp[rnd]==-1

);21

22 diff[i] =rnd;

23 tmp[rnd] = -1

; //該位置的數已被選擇過,將其標記為-1 24}

2526

free

(tmp);

27 }

這段**也是隨機產生位置,但它預先把整個陣列初始化為位置序號,然後隨機產生其中乙個位置,如果該元素

值不為-1,表示這個位置還沒有被使用過,就把i賦予它;否則,就重新隨機產生另乙個位置,直到整個陣列

被填滿。這個方法,越到後面,遇到已使用過的元素的可能性越高,重複次數就越多,這是不及第乙個方

法的地方,但總的來說,效率還是不錯的。

高效產生不重複的隨機數

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

如何高效的生成不重複的隨機數

背景 有個存有1000個問題的題庫,用陣列numhastack存,現要從中隨機生成5道題。如果直接用隨機數生成函式rand 然後把生成的題號存到陣列numgenerate中,會產生重複出現的問題。參考我原來的博文 1.最直接的解決辦法 每隨機生成乙個數,就拿到陣列numgenerate中比較,如果存...

C 產生不重複的隨機數

方法1 思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數代替。int index...