c語言如何生成隨機不重複的幾個數?

時間 2021-06-14 03:10:30

1樓:涇渭漳淮

如果你只是想獲得幾個或者幾十個隨機數,那最簡單的辦法就OK,拿個陣列把每次產生的隨機數存一下,然後產生新的隨機數之後查詢一下看看是不是重複了就行。

如果你想獲得幾k甚至幾兆的隨機數,那查詢就變成了瓶頸,你需要換乙個查詢的方法,紅黑樹字典樹之類的都可以。

如果你想獲得幾百兆甚至幾G個不重複的隨機數,那這時候瓶頸就不是查詢了,而是你根本沒有空間把之前已產生的隨機數存下來,這時候你可以考慮用布隆過濾器之類的來判斷是否重複,這時候其實就已經不是真隨機了。

如果你想要的更多,比如2^32個以上的數,那隨機數基本上不可能了,只能做到看上去隨機,你可以考慮加密演算法,也就是順序的產生資料,然後把這些資料加密之後輸出。

總之,如果不加限制「生成隨機不重複的數」是乙個不怎麼簡單的事情。

但是如果你只是想要得到7個不重複的數,你愛咋滴咋滴吧。

2樓:星辰

c語言的話一般使用rand()函式

原型int rand(void);

#include

//包含time、srand、rand函式的庫#include

intmain();

srand

(time

(NULL

));//讓數變得隨機

for(

inti=0

;i<7;

i++)//迴圈7次}

C 如何生成不重複大隨機數?

悽臨雨 設計一種一一對映的函式f x 0 21億一一對映到0 21億 然後取前n個x,然後f 隨機種子 1 f 隨機種子 n 就是你要的前n個不相同的隨機數。至於如何產生這樣的函式?我們知道十進位制是A 10000 B 1000 E 1。對位的順序做交換 交換D和E,會變成00,10,20,30,9...

如何用 C 語言生成 2,2 之間的隨機浮點數?

把區間 a,b 上的點r線性對映到區間 x,y 用公式 b r y x b a x即可。c語言裡面a 0,b RAND MAX,有的語言a 0,b 1。 Milo Yip 通常是這樣寫 include srand rand RAND MAX include printf include time i...

這種題用 C 語言除了用生成隨機數暴力猜答案之外,還能怎麼算?

Richard Xu 既然 靈劍 提到了 逼格 我初三的時候機緣巧合參加了NOIWC 09 當年的最後一題 優化設計 參見這裡 所以題主的這個問題其實就可以寫成45個布林變數 x12,x13,x110,x23,x910 然後用5個布林表示式來保證上述5個式子成立,再來10個布林表示式來保證每個數字不...