1. 程式人生 > 實用技巧 >用rand7() 實現 rand10()

用rand7() 實現 rand10()

題目:

已知一個函式rand7()能夠生成1-7的隨機數,請給出一個函式,該函式能夠生成1-10的隨機數。

思路:

假如已知一個函式能夠生成1-49的隨機數,那麼如何以此生成1-10的隨機數呢?

方法一:

rand10可以通過對10取餘+1得到。rand7()-1產生0~6,7*(rand7()-1)產生[0,7,14,21,28,35,42],再加rand7()-1得到0~49,捨去大於等於40的部分即可。

int rand10() {
        int res = 40;
        while (res >= 40)
            res = 7 * (rand7() - 1) + (rand7() - 1
); return res % 10 + 1; }

方法二:

//為了方便,貼上自評論區。
/*
    a    1    2    3    4    5    6    7
b                                
1        2    3    4    5    6    7    8
2        3    4    5    6    7    8    9
3        4    5    6    7    8    9    0
4        5    6    7    8    9    0    1
5        6    7    8    9    0    1    2
6        7    8    9    0    1    2    3
7        8    9    0    1    2    3    4

去掉右上角的  
6    7    8
7    8    9
8    9    0      後
每個數字的出現次數為4次,0-9的概率相同
*/ int rand10() { int a = rand7(), b= rand7(); while( 1){ if( !(a > 4 && b < 4)) break; a = rand7(), b= rand7(); } return (a+b) %10 + 1; }