從學(xué)習(xí)C語(yǔ)言就會(huì)接觸到的一個(gè)東西,隨機(jī)數(shù),但是在這個(gè)隨機(jī)數(shù)真的是隨機(jī)的嗎?答案肯定是不是的,對(duì)于計(jì)算機(jī)的所以語(yǔ)言實(shí)現(xiàn)的所有隨機(jī)數(shù)的方法都是偽隨機(jī)的,只不過(guò)很接近隨機(jī)數(shù).
在C++中,使用隨機(jī)數(shù)用到的API是rand(),可以去百度一下之類(lèi)的看看,這個(gè)API在一定的程度是多次甚至每次都會(huì)取到相同的隨機(jī),什么原因,有人解釋的比我好,所以不需要我去多解釋了吧,這里我說(shuō)一說(shuō)怎么用吧.加上一個(gè)time的算法,也就是計(jì)算機(jī)的系統(tǒng)試講相關(guān),這樣的話就會(huì)使得這個(gè)隨機(jī)數(shù)的種子發(fā)生變化,從而變得"隨機(jī)"起來(lái).
//頭文件
#include <time.h>
srand((unsigned)time(NULL));
升華的隨機(jī)數(shù)的區(qū)間
(a,b) #define Random(a,b) (rand()%(b-a+1))+a-1
[a,b) #define Random(a,b) (rand()%(b-a))+a
(a,b] #define Random(a,b) (rand()%(b-a))+a+1
[a,b] #define Random(a,b) (rand()%(b-a+1))+a
升華部分如果你只想怎么去用的話,直接拿去用,肯定是沒(méi)有錯(cuò)的,但是如果以后的,沒(méi)有網(wǎng)的情況下,找不到資料,不會(huì)寫(xiě)不就完蛋了,所以接下來(lái)我解釋一下升華部分的是怎么來(lái)的,隨便挑一個(gè)說(shuō)說(shuō),就說(shuō)第四個(gè),區(qū)間是[a,b]:
第一步,確定區(qū)間大小,也就是數(shù)據(jù)的個(gè)數(shù),是b-a+1,這個(gè)不用說(shuō)吧。
第二步,試著去取同樣區(qū)間大小的隨機(jī)數(shù),rand()%x 的區(qū)間是[1,x-1],就這樣可以試著去取一下,取rand%(b-a+2),大小為b-a+1,不是么?
第三步,按上一步取的區(qū)間,應(yīng)該是[1,b-a+1],那么加上一個(gè)a-1呢?是不是就是從a開(kāi)始了,到b結(jié)束了?所以就是rand%(b-a+2)+a-1
第四步,合并不必要的數(shù)字,也就是把1合并進(jìn)rand,不就得到上述的函數(shù)了?
end