1. 程式人生 > >知道隨機產生1-7的函式,如何得到隨機產生1-10的函式

知道隨機產生1-7的函式,如何得到隨機產生1-10的函式

題目:http://chaotang0281.iteye.com/blog/1179205

      已知有個rand7()的函式,它可以返回1到7之間的隨機自然數,現在請讓利用這個rand7()來構造rand10()使它能 隨機地產生1~10之間的自然數。

想的結果:

    1、主要是要保證各個數產生的概率一致。

    2、如果rand7()已知,求rand5()就容易了。
    short rand5()
    {
      short num;

      do
      {
         num = rand7();
      }
      while ( num > 5)
        
      return num;
    }

    3、解決題目的關鍵是通過rand7()的加減乘除得到一個等概率的1~N之間的數,N為>10的自然數。對於這一類題目的一般公式是: m*(rand_m()-1)+rand_m();n<m && n<=m*m。
    注: rand_m() 可以生成 [1,m]的自然數, 要生成 rand_n() 即[1,n]的自然數的公式。