c/c++產生隨機數用到兩個函式rand() 和 srand()
一. 不指定範圍產生隨機數
用到函式rand(),函式原型為int rand(),無引數。此時會產生乙個介於0~rand_max間的整數。rand_max的大小可以檢視,在include資料夾(linux在usr目錄、windows在安裝目錄)的stdlib.h可以看到,linux下其值為2147483647(),其值與具體系統有關。
#include#includeint main()二. 指定範圍產生隨機數,產生0到某個數的隨機數沒有現成的函式,但是可以通過取餘得到return 0;
}
#include#include#define random(x) (rand() % x) //通過取餘取得指定範圍的隨機數說明下:假設dis取5,int main()
return 0;
}
注意乙個問題:以上兩個程式每次執行產生的結果是相同的,既是個偽隨機數。rand()產生隨機數與具體的種子有關,當不特意用srand()獲取種子時,種子的預設值為1,因此需要用srand()函式產生不同的種子,srand函式原型:void srand(unsigned seed);為了產生不同的種子值,通常用時間作為引數值。例如對於一,修改程式如下:
#include#include#includeint main()三. 指定範圍產生隨機數要求:指定範圍(m,n),m、n關係不定,隨機數包括m和nreturn 0;
}
想方設法,把範圍(m,n)改變到(0,x),到最後再轉移回去。三種情況
1:m=n此時不該叫隨機數,這裡返回m2:m>n:
標記pos=n,距離差pos=m-n+1
返回 rand() % dis + pos
3:n>m:
標記pos=m,距離差=n-m+1
返回rand()%dis + pos
#include#include#includeint random(int m, int n)昇華srand((unsigned)time(null));else if(m > n)
else
}int main()
return 0;
}
(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
C C 產生隨機數
c c 產生隨機數 c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在...
C C 產生隨機數
c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在安裝目錄 的stdl...
C C 產生隨機數
c c 產生隨機數用到兩個函式rand 和 srand 一.不指定範圍產生隨機數 用到函式rand 函式原型為int rand 無引數。此時會產生乙個介於0 rand max間的整數。rand max的大小可以檢視,在include資料夾 linux在usr目錄 windows在安裝目錄 的stdl...