等概論生成某範圍內的數
阿新 • • 發佈:2021-09-05
(randX() - 1)*Y + randY() 可以等概率的生成[1, X * Y]範圍的隨機數
利用此方法,再加上一些限定就可以生成指定範圍的隨機數(等概率):
例如:利用Rand(7)生成Rand(10)
由於只能利用Rand(7),所以此時x,y都取7,只有這樣才能保證等概率。
(rand7()−1)∗7+rand7() 可以等概率生成範圍在【1,49】的數。
下面利用此範圍生成【1,10】的數:
1.直接捨去大於10的其他數,一旦大於10,就繼續迴圈生成,直到符合要求。
2.捨去大於40的9個數,剩下的1到40,全部看做【1,10】,利用1 + num % 10 。
3.進一步減少捨棄的數,因為捨棄數越多,涉及到while迴圈就越多,可以利用(大於40的隨機數−40−1)∗7+rand7() 得到63個數,只需捨棄3個數;
再次減少,對於捨棄的三個數,利用上述公式,生成【1,21】,只需捨棄一個數。