擲骰子,按點(diǎn)數(shù)走步數(shù),走到第n格的概率

如題所說(shuō):
像大富翁一樣,擲骰子,按骰子的點(diǎn)數(shù),走步數(shù),計(jì)算走到第n格的概率是多少?
例如我們的這個(gè)函數(shù)dp(n)計(jì)算的是第n格的概率,則:
//骰子點(diǎn)數(shù)必須為(1),這1種可能
p(1)=第1格的概率=1/6
//骰子點(diǎn)數(shù)必須為(2),(1,1),兩種可能
p(2)=第2格的概率=1/6+(1/6)(1/6)
//骰子點(diǎn)數(shù)(3),(1,2),(2,1),(1,1,1)
p(3)=第3格的概率=1/6+(1/6)
(1/6)2+(1/6)(1/6)*(1/6)
第4個(gè)的排列組合實(shí)在是太多了,這里我就不繼續(xù)列舉了
我們來(lái)分析一下,這個(gè)p(n)改如何計(jì)算,第n格的概率其實(shí)是第n-6格到第n-1格,整體計(jì)算出來(lái)的
如果n<6則:
p(1)=1/6
p(2)=p(1)/6+1/6
p(3)=p(1)/6+p(2)/6+1/6
...
如果n>6則:
p(n)=p(n-1)/6+p(n-2)/6+p(n-3)/6+p(n-4)/6+p(n-5)/6+p(n-6)/6
則我們只需要從1開(kāi)始算概率,
計(jì)算1的概率時(shí),必須將第一格對(duì)2-7格的概率的影響也計(jì)算出來(lái)
p(n+1)+=p(n)/6
具體算法如下:

public static double p(int n){
        if(n<=0||n>64){
            return 0;
        }
        double arr[] = new double[64];
        for(int i = 0;i<64;i++){
            if(i<6){
                  arr[i]+=1.0/6;
              }
            for(int j=1;j<7;j++){
              if(i+j<64)
              arr[i+j]+=arr[i]/6.0;
            }
        }
        return arr[n-1];
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容