把M个不同的桔子放在N个同样的盘子里,不允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)
不允许有空盘不放
#include <iostream>
#include <iomanip>
using namespace std;
int a[30], n, m, tmp = 0;
void dfs(int step){
if (step == n + 1){
if (tmp != m) return;
for (int i = 1; i <= m; i++)
{
cout << setw(3) << a[i];
}
cout << '\n';
return;
}
a[++tmp] = step;
dfs(step + 1);
--tmp;
dfs(step + 1);
}
int main(){
cin >> n >> m;
dfs(1);
return 0;
}
假设M=7,N=3,且5 1 1 和 1 5 1设为同样的分法,解题如下
def juzi_divide(m,n):
if m == 0 or n == 1 :
#如果,碟子只有1个,无论橘子有多少个都只有一种放法
return 1
if n > m : #如果,碟子的个数大于苹果的个数
return juzi_divide(m,m)
else :
return juzi_divide(m,n-1) + juzi_divide(m-n,n)
if name=='__main__' :
result = juzi_divide(7,3)
print(result)