1. 程式人生 > >等概率隨機函式的實現

等概率隨機函式的實現

題目:給定一個函式rand5(),該函式可以隨機生成1-5的整數,且生成概率一樣。現要求使用該函式建構函式rand7(),使函式rand7()可以隨機等概率的生成1-7的整數。思路:很多人的第一反應是利用rand5() + rand()%3來實現rand7()函式,這個方法確實可以產生1-7之間的隨機數,但是仔細想想可以發現數字生成的概率是不相等的。rand()%3 產生0的概率是1/5,而產生1和2的概率都是2/5,所以這個方法產生6和7的概率大於產生5的概率。正確的方法是利用rand5()函式生成1-25之間的數字,然後將其中的1-21對映成1-7,丟棄22-25。例如生成(1,1),(1,2),(1,3),則看成rand7()中的1,如果出現剩下的4種,則丟棄重新生成。簡單實現: