思路:
這裡可以用兩個陣列來儲存骰子點數的每個總數出現的次數。在一輪迴圈中,第乙個陣列中的第n個數字表示骰子的和為n出現的次數。在下一輪的迴圈中,加上乙個新的骰子,此時和為n的骰子出現的次數應該等於上一輪迴圈中骰子點數和為n-1,n-2,n-3,n-4,n-4,n-5與n-6次數的總和,所以把另外乙個陣列的第n個數字設為前乙個陣列對應的第n-1,n-2,n-3,n-4,n-5與n-6個數字之和。注意要將第二個陣列下標為0和1的數字初始化為0,出現次數從下標為2的元素開始計算。**裡面的flag方便將兩個陣列進行轉換,這種處理方式要學習一下。
**:
#include using namespace std;
int g_maxvalue = 6;
void printprobability(int number)
int flag = 0;
for (int i = 1; i <= g_maxvalue; ++i)
pprobabilities[flag][i] = i;
for (int k = 2; k <= number; ++k)
}flag = 1 - flag;
} double total = pow((double)g_maxvalue, number);
for (int i = number; i <= g_maxvalue * number; ++i)
delete pprobabilities[0];
delete pprobabilities[1];
}
劍指offer n個骰子的點數(java)
題目 把n個骰子仍在地上,所有骰子朝上一面的點數之和為s,輸入n,列印出s的所有可能的值出現的概率。骰子一共6個面,每個面上都有乙個點數,對應的是1 6之間的乙個數字。所以n個骰子的點數和的最小值是n,最大值為6n.另外根據排列組合的知識,我們還知道n個骰子的所有點數的排列數為6 n.要解決這個問題...
面試題60 劍指offer n個骰子的點數
題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。示例 輸入 n 2 輸出 解法 動態規劃規律 f n f n 1 f n 2 f n 3 f n 4 f n 5 f n 6 向已有的骰子中再加入乙個骰子,此時和為n出現的次數應為和為n 1,n 2,...
劍指Offer n個骰子扔出點數和S的概率
原文節選自 劍指offer 題目 把 n個骰子扔在地上,所有骰子朝上一面的點數之和為 s。輸入 n,列印出 s的所有可能的值出現的概率。分析 玩過麻將的都知道,骰子一共 6個面,每個面上都有乙個點數,對應的數字是1到 6之間的乙個數字。所以,n個骰子的點數和的最小值為 n,最大值為 6n。因此,乙個...