已知可生成0~4的rand5(),實現生成0~6的rand7()

若已知生成0~6的rand7(),求生成0~4的rand5(),則一個方法就是不斷生成0~7的數,直到這個數知足0~4就返回。spa

int rand5(){
    int res;
    do{
        res = rand7();
    }while(res >4);
    return res;
}

如今已知生成0~4的rand5(),求解生成0~6的rand7(),就是想辦法利用rand5()去生成0~大於6的數字,能夠使用rand5()+rand5()*5,這個式子能夠生成0~24的隨機數,每一個數字的組成只有一種可能,因此是等機率地生成0~24裏的每個數字。.net

當0~24中大於6的數字能夠對7取餘獲得0~6的數字,可是爲了保證出現0~6的數字的每個機率相同,咱們只能在0~20(20=24/7*7-1)中去選擇,大於20的數,要被捨棄。code

因此實現代碼爲:blog

int rand7(){
    int res;
    do{
        res = rand5()+rand5()*5;//生成0~24的隨機數
    }while(res>=24/7*7);
    return res%7;
}

 參考地址:http://blog.csdn.net/u010025211/article/details/49668017class

相關文章
相關標籤/搜索