由隨機數rand5實現隨機數rand7


rand5表示生成隨機數1,2,3,4,5

rand7表示生成隨機數1,2,3,4,5,6,7

要通過rand5構造rand7現在可能沒有什么思路,我們先試着用rand7生成rand5

rand7生成rand5很簡單,把6和7排除掉就是rand5了,也就是當隨機到大於5的時候,就再隨機一次,直到小於等於5

代碼寫起來很容易


public static int rand5(){
    Random ra =new Random();
    int result = ra.nextInt(7)+1;
    while (result > 5){

        result = ra.nextInt(7)+1;
    }

    return result;

}

這時我們可以用同樣的思路,先利用rand5把范圍放大,然后再排除掉超出的范圍

這里我們用這樣的一個公式:newRand = n * (Randn – 1) + Randn,這個公式可以保證新的隨機數中每個的概率是相同的(可以自己試試其他構造方式,你會發現有的結果中每個數的概率是不同的)

比如rand5,newRand = 5×(Rand5-1)+ Rand5,那么newRand的范圍就是1-25

如果你擴大了一次范圍之后還是比目標范圍小,那么就再將newRand擴大一下newRand2 = n * (newRand – 1) + Randn

這時rand5以及擴大到rand25了,接下來把范圍縮小,如果直接排除的話,要除去8-25,這個范圍太大了

所以我們找到比25小的最近的7的倍數21

我們把隨機數縮小的1-21后,再除以7取余數+1,這樣得到的結果就是1-7了


public static int rand7(){
    int result = 25;
    while (result > 21){

        result = 5*(rand5()-1)+rand5();
    }

    return result%7+1;

}


免責聲明!

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



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