乙個簡單演算法題是 10個蘋果有多少種分法(整個),比如 1 1 8和 1 8 1、8 1 1是一樣的。
它的本質還是m個蘋果和n個盤子的問題,這裡有個特殊的條件是m<=n。
簡單分析下:
m個蘋果 分成n份
第乙份是x1個,剩下的m-x1個蘋果和n-1份;
第二份是x2個,剩下的m-x1-x2個蘋果和n-2份;
······ ······ ······
第n份是xn個,剩下的m-x1-x2···-xn個蘋果和1份;
最終出口還是剩下的份數為1,不能再分了。
/**
* 遞迴
** @param remain 剩餘個數
* @param num 分幾次
* @param print 列印字首
* @param start 開始值
*/public static void deep(int remain, int num, string print, int start)
/*** j為什麼要從start開始?
* 因為 2_1_7 和 1_2_7是等效的,後者在操作的時候已經涵蓋了前者的情況
*/for (int j = start; j <= remain - start; j++)
}
呼叫處按具體邏輯處理
總共有多少種不同的分法,列印的地方累加即可。
M個蘋果放到N個相同盤子和N個不同盤子的解法
題目很簡單 就是把m個蘋果放到n個盤子中,盤子可以為空,問你有多少種放法。首先應該明白,盤子相同時三個盤子放1 1 5 和 5 1 1 是相同的,盤子不一樣時是不同的放法。1 放入相同盤子 蘋果為m,盤子為n 放蘋果時分為兩種可能 一種是蘋果數大於等於盤子數,第二種是蘋果數小於盤子數。f m,n 是...
遞迴演算法《M個蘋果放入N個盤子》
題目 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。樣例輸入 7 3樣例輸出 放蘋果分為兩種情況,一種是有盤子為空,一種是每個盤子上都有蘋果。令 m,n ...
「n個球放到m個盒子」問題整理
思路一 8個球放到3個盒子 取球最少盒子取0個球,取球第二少的盒子取 0,4 取球最少盒子取1個球,取球第二少的 盒子取 1,3 取球最少盒子取2個球,取球第二少的 盒子取 2,3 一共5 3 2 10種 類似於 整數拆分 包含0 非遞減序 8 0 0 8 1 7 2 6 3 5 8 1 1 6 2...