型別一: 完全範圍內的隨機數
1int a[100];2
3//1.初始化:按序列號依次賦值
4for(int i=0; i<=99; ++i)58
//2.生成不同的隨機數序列
9for(int i=99; i>=1; --i)
10
上面這段**只需要遍歷一次就可以產生這100個不重複的隨機數.
型別二: 部分範圍內的多個不同的隨機數
1void
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...