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;
}
計算結果:
在此,深深的表示對大神“或缺”的謝意!