Featured image of post 剑指 Offer 60. n 个骰子的点数

剑指 Offer 60. n 个骰子的点数

题目描述

把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 s。输入 n,打印出 s 的所有可能的值出现的概率。

你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。

示例 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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
func dicesProbability(n int) []float64 {
    dp := []float64{1 / 6.0, 1 / 6.0, 1 / 6.0, 1 / 6.0, 1 / 6.0, 1 / 6.0}
    for i := 2; i <= n; i++ {
        // values within the range of [n, 6n], so 6n - n + 1 = 5n + 1
        tmp := make([]float64, 5*i+1)
        for j := 0; j < len(dp); j++ {
            for k := 0; k < 6; k++ {
                tmp[j+k] += dp[j] / 6.0
            }
        }
        dp = tmp
    }
    return dp
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/07/01 08:42:54
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计