c 取隨機數

2021-07-02 19:01:46 字數 1521 閱讀 6708

**:

c/c++產生隨機數用到兩個函式rand() 和 srand()

一. 不指定範圍產生隨機數

用到函式rand(),函式原型為int rand(),無引數。此時會產生乙個介於0~rand_max間的整數。rand_max的大小可以檢視,在include資料夾(linux在usr目錄、windows在安裝目錄)的stdlib.h可以看到,linux下其值為2147483647(),其值與具體系統有關。

#include#include

intmain()

return0;

}

二. 指定範圍產生隨機數,產生0到某個數的隨機數

沒有現成的函式,但是可以通過取餘得到

#include#include

#define random(x) (rand() % x) //

通過取餘取得指定範圍的隨機數

intmain()

return0;

}

說明下:假設dis取5,

注意乙個問題:

以上兩個程式每次執行產生的結果是相同的,既是個偽隨機數。rand()產生隨機數與具體的種子有關,當不特意用srand()獲取種子時,種子的預設值為1,因此需要用srand()函式產生不同的種子,srand函式原型:void srand(unsigned seed);為了產生不同的種子值,通常用時間作為引數值。例如對於一,修改程式如下:

#include#include

#include

intmain()

return0;

}

三. 指定範圍產生隨機數

要求:指定範圍(m,n),m、n關係不定,隨機數包括m和n

想方設法,把範圍(m,n)改變到(0,x),到最後再轉移回去。三種情況

1:m=n此時不該叫隨機數,這裡返回m

2:m>n:

標記pos=n,距離差pos=m-n+1

返回 rand() % dis + pos

3:n>m:

標記pos=m,距離差=n-m+1

返回rand()%dis + pos

#include#include

#include

int random(int m, int

n)

else

if(m >n)

else

}int

main()

return0;

}

昇華

srand((unsigned)time(null));

(a,b) (rand()%(b-a+1))+a-1

[a,b) (rand()%(b-a))+a

(a,b] (rand()%(b-a))+a+1

[a,b] (rand()%(b-a+1))+a

ojbc 取隨機數

隨機數的使用 1 arc4random 比較精確不需要生成隨機種子 使用方法 通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 2 ccrandom 0 1 coc...

PHP 取隨機數

假設 有四個選項 a 佔 10 b佔20 c佔30 d 佔 40 原理就是現獲取隨機數,然後找區間。當然了,選項的數量可以任意。目前預設是 總和是 100 如果需要別的數,修改 隨機數的範圍即可。這個演算法,比較簡單,效率也還算高。當然因為是 rand 所以產生的是偽隨機數,不是真正意義上的隨機,能...

Oracle 取隨機數

1 從表中隨機取記錄 select from select from staff order by dbms random.random where rownum 4 表示從staff表中隨機取3條記錄 2 產生隨機數 select dbms random.random from dual 產生乙個...