用rand7() 實現 rand10()
阿新 • • 發佈:2020-09-14
題目:
已知一個函式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; }