問題:
給定一個函數rand5(),該函數可以隨機生成1-5的整數,且生成概率一樣。現要求使用該函數構造函數rand7(),使函數rand7()可以隨機等概率的生成1-7的整數。
思路:先擴區間,再取模,即構造大的整數區間,限制整數區間,最后映射整數區間。
rand7
int Rand5() { return rand()%5+1; } int Rand7() { int ret; while(1) { //構造出等概率的范圍(1-25) ret = (Rand5()-1)*5 + Rand5(); //舍棄22-25 if(ret >= 22) continue; else return ret%7+1; } }
rand3
int Rand3() { int ret; while(1) { ret = (Rand5()-1)*5 + Rand5(); if(ret>=25) continue; else return ret % 3 + 1; } }