把n個骰子扔在地上,求出現和為s的概率
可得n<=s<=6n
方法:定義6n-n+1長度的陣列,然後對所有可能出現的組合進行計算,把結果進行計數存進陣列;遞迴
方法二:動態規劃,大問題小化:考慮使用兩個陣列儲存點子的總數之和出現的次數,每增乙個骰子,是前幾個陣列值的和,因為6個面,所以前n的前6的和
void print_f1(intnumber)
flag=1-flag;
}//如果求概率,那麼需要進行double運算
//總數是maxvaule的number次方
for(int i=number;i<=maxvaule*number;i++)
system.out.print(array[flag][i]+" ");
}
面試題43 n個骰子的點數
注意點 n 個骰子的面朝上點數和的範圍 n,6n 一共有6n n 1種可能 每個骰子的範圍 1,6 n 個骰子分為兩部分,第一骰子和其餘的n 1個骰子 遞迴的終止條件為當前其餘骰子個數為0個 include include include includeusing namespace std int...
面試題43 n個骰子的點數
題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s所有可能的值出現的概率。該題是典型的動態規劃問題。n個骰子它的和顯然和前面n 1個骰子的狀態有關。可以一步步劃分來求,一般考慮設個數祖,乙個記錄當前是第多少個骰子,乙個記錄總和多少,還要記錄總和的概率,因此此處考慮設個二維陣列...
面試題43 n個骰子的點數
1.將n個骰子扔在地上,所有骰子朝上一面的點數之和為s,輸入n,列印出s的所有可能的值出現的概率。分析 1 基於遞迴的方法 可以將n個骰子分為兩堆,第一堆只有1個,第二個堆有n 1個,單獨的那乙個可能出現的1到6的點數,只需計算1到6的每一種和剩餘的n 1個骰子的和,再將n 1個骰子分為1個和n 2...