m個相同的蘋果,放在n個相同的盤子中,由於相同,使用排列組合的方法不好處理。這個問題困擾了我很久 最後由大神“或缺”給出了答案: 以8個蘋果放在3個盤子中為例 思路: 8蘋果3盤子 =8蘋果2盤子+5蘋果2盤子(每盤已經放入1個)+2蘋果2盤子(每盤已經放入3個) =(8蘋果1盤子+6蘋果1盤子(每盤已經放入1個))+ (3蘋果1盤子(每盤已經放入1個)+1蘋果1盤子)(每盤已經放入1個)+(1蘋果1盤子(每盤已經放入1個)+1蘋果1盤子)(每盤已經放入3個) ... =5+3+2 =10 編程實現:
#include <iostream> #include <string> using namespace std; int func(int m, int n) { cout << "m=" << m << ", n=" << n << endl; if (n <= 1) return 1; int t=0; for (int i=m; i>=0; i-=n) { t += func(i, n-1); } return t; } int main() { int m=0, n=0; while (1) { cout << "請輸入蘋果數 盤子數:" ; cin >> m >> n; cout << "您輸入的是: m=" << m << n << endl; if (m==-1) { break; } cout << "共" << func(m, n, "--") << "種放法" << endl; cout << "------------" << endl; } return 0; }
計算結果: 在此,深深的表示對大神“或缺”的謝意!