谷歌面試題:給定能隨機生成整數1到5的函數,寫出能隨機生成整數1到7的函數


給定能隨機生成整數1到5的函數,寫出能隨機生成整數1到7的函數。

我的想法:

編寫一個生成0和1的隨機函數:
step1. 調用給定的隨機函數original_rand()生成一個數
如果==3 goto step1
如果<3 return 0
如果>3 return 1
編寫一個生成1到7的隨機函數
調用生成0和1的隨機函數3次,構成000或001或010.......
如果???不等於0返回,否則重新生成。

int rand_01()
{
   int r = original_rand();
   if(r == 3) return rand_01();
   if(r < 3) return 0;
   if(r > 3) return 1;
}

int rand_17()
{
   int i = 0;
   i += rand_01();
   i += rand_01() << 1;
   i += rand_01() << 2;
   if(i == 0) return rand_17();
   return i;
}

有網友提出這種思路:

產生K個數(k>1) 假定產生的數分別為n1,n2,n3,n4...
那么定義產生的數為n1-1+(n2-2)*5+(n3-1)*5^2+(n4-1)*5^3........
於是產生的數位於區間(0,5^k-1)
然后把5^k分成k等分,產生的數位於哪個等分就是那個產生的隨機數(0~6),然后+1即可
如果位於k等分的余數范圍,則重新執行一次上述過程
不用擔心余數問題,當k取3時落到余數范圍的概率就已經降低為6/125

也是可以參考的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM