由隨機數rand5實現隨機數rand7

2022-05-15 19:33:09 字數 838 閱讀 6514

rand7表示生成隨機數1,2,3,4,5,6,7

要通過rand5構造rand7現在可能沒有什麼思路,我們先試著用rand7生成rand5

rand7生成rand5很簡單,把6和7排除掉就是rand5了,也就是當隨機到大於5的時候,就再隨機一次,直到小於等於5

**寫起來很容易

public

static

intrand5

() return result;

}

這時我們可以用同樣的思路,先利用rand5把範圍放大,然後再排除掉超出的範圍

這裡我們用這樣的乙個公式:newrand = n * (randn – 1) + randn,這個公式可以保證新的隨機數中每個的概率是相同的(可以自己試試其他構造方式,你會發現有的結果中每個數的概率是不同的)

比如rand5,newrand = 5×(rand5-1)+ rand5,那麼newrand的範圍就是1-25

如果你擴大了一次範圍之後還是比目標範圍小,那麼就再將newrand擴大一下newrand2 = n * (newrand – 1) + randn

這時rand5以及擴大到rand25了,接下來把範圍縮小,如果直接排除的話,要除去8-25,這個範圍太大了

所以我們找到比25小的最近的7的倍數21

我們把隨機數縮小的1-21後,再除以7取餘數+1,這樣得到的結果就是1-7了

public

static

intrand7

() return result%7+1;

}

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

演算法 由0 5隨機數設計0 8隨機數

首先生成兩個0 5的隨機數a和b。由a和b組成兩位六進製制數ab,00 55 由於a和b都是隨機的,則00 55範圍內的數也是隨機的 將ab化成十進位制c a 6 b。將出現整行的模9,未出現整行的過濾掉即可。00 55 六進製制 0 35 0 1 2 3 4 5 6 7 8 9 10 11 12 ...

rand生成偽隨機數

void srand unsigned seed 設定隨機數種子。int rand void 根據設定的種子計算生成一組整型偽隨機數序列。若沒有手動設定seed,這個函式會自動設定seed為1,即手動呼叫srand 1 與不呼叫srand產生的效果一樣。每次呼叫rand時,會依次將隨機數從隨機數序列...