從1到100隨機20個不重複的數字出來c

2021-09-25 09:08:41 字數 1019 閱讀 3742

//從1到100隨機20個不重複的數字出來

//已有下面函式,隨機生成乙個[min, max]的數

intmyrand

(int min,

int max)

;

一開始想的是使用set和vector來儲存已經隨機生成的數,每次要生成新的數的時候,就要通過set來判斷是否已經重複。

void

get20randomnum()

count++;}

assert

(myset.

size()

==20

&& arr.

size()

==20

,"error");

for(

auto val : arr)

}

但是這有乙個問題,就是具備乙個極小的概率,每次新生成的數都是原來的,這樣就永遠不會得到全部的隨機數,因此上面判斷count次數是否超過10000,防止while迴圈永遠不會結束,但是這樣也沒有真正解決問題。

下面使用了另外一種方法進行補充。

codes儲存已經生成的隨機數,然後myrand生成的範圍是剔除了生成的隨機數數量後的,例如codes裡面有[2]乙個數,那麼範圍應該是100- 1 = 99。每次生成的是偏移量。例如myrand(1, 99)返回2,那麼就應該從1開始偏移2,由於2已經生成了,則跳過,為3

}這樣的複雜度有點大,但是可以作為上面第乙個方法的補充,即當迴圈了10000次仍然不能得到結果的時候,可以選擇這個方法進行補充。

java實現100個不重複隨機數

前幾天,做了這個題目。發現實現起來有不同的路子。1.是隨便對int陣列內的數進行調換。2.是建立兩個陣列,乙個是1 100,另乙個從其中隨機取值。這裡可以設定乙個end變數記錄取值長度。1.public class randomarr for int i 0 i 100 i 2.public cla...

C 生成100 不重複的隨機數

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

100萬個不重複的8位的隨機數

use tempdb go 建立測試表 create table tb id char 8 建立用於自動過濾重複值的唯一索引 create unique index ix tb ontb id with ignore dup key go 測試資料插入的處理時間,記錄開始處理的時間點 declare...