大數(shù)據(jù)中如何解析n個(gè)骰子的點(diǎn)數(shù)

大數(shù)據(jù)中如何解析n個(gè)骰子的點(diǎn)數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都發(fā)電機(jī)維修等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身建設(shè)品質(zhì)網(wǎng)站。

把n個(gè)骰子扔在地上,所有骰子朝上一面的點(diǎn)數(shù)之和為s。輸入n,打印出s的所有可能的值出現(xiàn)的概率。

你需要用一個(gè)浮點(diǎn)數(shù)數(shù)組返回答案,其中第 i 個(gè)元素代表這 n 個(gè)骰子所能擲出的點(diǎn)數(shù)集合中第 i 小的那個(gè)的概率。

示例 1:

輸入: 1

輸出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]

示例 2:

輸入: 2

輸出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

限制:

1 <= n <= 11

解題思路

1,這是一個(gè)動(dòng)態(tài)規(guī)劃題目

2,假設(shè)有i個(gè)骰子,可以拼出的點(diǎn)數(shù)為i,i+1,i+2,......,i*6,共2*i-i+1個(gè)

3,i取值范圍是1...n

4,  用dp[i][j],表示,i個(gè)骰子,點(diǎn)數(shù)和為j的組合個(gè)數(shù)

5,狀態(tài)轉(zhuǎn)移方程為

        dp[i][j]=sum(dp[i-1][j-k]) k=1,2,3,4,5,6

6,由于用到了i-1,所以遞增

7,結(jié)果取,i=n那一列,j變化范圍從 i到2*i的數(shù)據(jù),除以 pow(6,n)

代碼實(shí)現(xiàn)

func twoSum(n int) []float64 {    var r []float64    dp:=make([][]int,n+1)    for i:=0;i<n+1;i++{        dp[i]=make([]int,n*6+1)    }
   s:=pow(6,n)
   //1  1...6    //2  2...12    for i:=1;i<=6;i++{        dp[1][i]=1    }
   for i:=2;i<=n;i++{        for j:=i;j<=i*6;j++{            for k:=1;k<=6;k++{                if j>k{                                      dp[i][j]+=dp[i-1][j-k]                     fmt.Println( dp[i][j],":",i,j,"=>",i-1,j-k)                }            }            if j==i*6{            //    dp[i][j]=1            }                    }    }    for  j:=n;j<=n*6;j++{        r=append(r,float64(dp[n][j])/float64(s))    }     fmt.Println(dp[n][n:n*6+1])    fmt.Println(dp,s)    return r
}

func pow(x,y int)int{    r:=1    for i:=0;i<y;i++{       r*=x    }    return r}

/**解題思路dp[i][j]表示當(dāng)n=i時(shí),和為j出現(xiàn)的排列情況總數(shù);狀態(tài)轉(zhuǎn)移方程:dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4]+dp[i-1][j-5]+dp[i-1][j-6];初始條件:dp[1][1]=dp[1][2]=dp[1][3]=dp[1][4]=dp[1][5]=dp[1][6]=1;
代碼class Solution {public:    vector<double> twoSum(int n) {        vector<vector<int>>dp(n+1,vector<int>(6*n+1,0));        double num=pow(6,n);        vector<double>res(5*n+1,1/(double)6);        //初始狀態(tài)        for(int i=1;i<=6;i++)dp[1][i]=1;        for(int i=2;i<=n;i++){      //從2到n計(jì)算dp            for(int j=i;j<=i*6;j++){  //表示當(dāng)n=i時(shí)候的點(diǎn)數(shù)和取值從i到6i                for(int k=1;k<=6;k++){  //dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4]+dp[i-1][j-5]+dp[i-1][j-6];                    if(j-k>0)dp[i][j]+=dp[i-1][j-k]; //第i個(gè)骰子點(diǎn)數(shù)一定比i-1個(gè)骰子點(diǎn)數(shù)大                    if(i==n)res[j-i]=dp[i][j]/num;              }            }        }                return res;    }};*/

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

本文名稱:大數(shù)據(jù)中如何解析n個(gè)骰子的點(diǎn)數(shù)
新聞來源:http://bm7419.com/article30/jcsjso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化建站公司、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)