n個骰子的點數

2021-10-11 15:51:06 字數 1868 閱讀 9949

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方法一:遞迴(超時)

public double twosum(int n) 

return ans;

}//計算有n個骰子,點數和為sum的情況

public int count(int sum, int n)

if (sum <= 0 || n <= 0)

int s = 0;

for (int i = 1; i <= 6; i++)

return s;

}

時間複雜度o(6n)

空間複雜度o(n):遞迴棧

方法二:記憶優化(超時)

public double twosum(int n) 

return ans;

}public int count(int sum, int n, int dp)

if (sum <= 0 || n <= 0)

if (dp[sum][n] != 0)

for (int i = 1; i <= 6; i++)

return dp[sum][n];

}

時間複雜度o(n2)

空間複雜度o(n2)

方法三:動態規劃

public double twosum(int n) 

for (int i = 2; i <= n; i++)

dp[j][i] += dp[j - k][i - 1];}}

}int type = n * 6 - n + 1;

double ans = new double[type];

for (int i = 0; i < type; i++)

return ans;

}

時間複雜度o(n2)

空間複雜度o(n2)方法四:空間優化

public double twosum(int n) 

for (int i = 2; i <= n; i++)

dp[j] += dp[j - k];}}

}int type = n * 6 - n + 1;

double all = math.pow(6, n);

double ans = new double[type];

for (int i = 0; i < type; i++)

return ans;

}

時間複雜度o(n2)

空間複雜度o(n)

n個骰子的點數

把n個骰子扔在地上,所有骰子朝上的一面的點數之和為s。輸入n,列印出s的所有可能的值和出現的概率。1 基於迴圈求骰子點數 2int g maxvalue 6 骰子的點數個數 3void printprobability int number number 為骰子個數49 int pprobabili...

n個骰子的點數

題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。方法一 遞迴 思路 設n個骰子某次投擲點數和為s的出現次數是f n,s 那麼,f n,s 等於n 1個骰子投擲的點數和為s 1 s 2 s 3 s 4 s 5 s 6時的次數的總和 f n s f n...

n個骰子的點數

題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。方法一 遞迴 思路 設n個骰子某次投擲點數和為s的出現次數是f n,s 那麼,f n,s 等於n 1個骰子投擲的點數和為s 1 s 2 s 3 s 4 s 5 s 6時的次數的總和 f n s f n...