產生 0 n 1 範圍內的 m 個隨機整數

2021-08-30 01:55:44 字數 472 閱讀 2545

/*

*產生 0~n-1 範圍內的 m 個隨機整數的有序列表,且不允許重複,m <= n

*注:參考<>一書

*/#include

#include

#include

#include

using namespace std;

//產生較大的隨機數

int bigrand()

//隨機返回m,n之間的整數。

int randint(int m,int n)

///從0 -- n-1中隨機選m個數;

void method1(int n,int m)

}//弄亂這n個數,再取前m個數排序

void method3(int n,int m)

sort(x,x+m);

for(i=0;i}void main()

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

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

0 n 1個數中隨機選m個數

給定乙個n,乙個m,要求從0.n 1個數中隨機選取m個數。這裡參考 程式設計珠璣 中的乙個方法,既利用概率測試來進行選取。假設我們要從0到100中選取10個數。首先考慮0,我們選取它的概率為10 100 1 10,因此我們可以產生乙個隨機數 應該遠遠大於n 利用該數模100的值是否小於10來模擬選取...

c c vc產生任意範圍內的隨機數

大家都知道c語言中的隨機函式random,可是random函式並不是ansi c標準,所以說,random函式不能在gcc,vc等編譯器下編 譯通過。那麼怎麼實現vc語言中的隨機函式呢?其實,除了random函式,還有乙個rand函式,這個函式也是乙個隨機函式,他可以產生從0到rand max 32...