m个相同的苹果,放在n个相同的盘子中,由于相同,使用排列组合的方法不好处理。这里选用递归调用的方式解决问题:
(8个苹果,放在3个盘子里)=
(8个苹果,放在2个盘子)
+(5个苹果,放在2个盘子【每盘已经放入1个苹果】)
+(2个苹果,放在2个盘子里【每盘已经放入一个苹果】)
=(8个苹果,放在1个盘子里)+(6个苹果,放在1个盘子里【每盘已经放入1个苹果】)+(4个苹果,放在1个盘子里【每盘已经放入2个苹果】)+(2个苹果,放在1个盘子里【每盘已经放入3个苹果】)+(0个苹果,放1个盘子【每盘已经放入4个苹果】)【5】
+(5个苹果,放在1个盘子里)+(3个苹果,放在1个盘子里【每盘已经放入1个苹果】)+(1个苹果,放在1个盘子里【每盘已经放入2个苹果】)【3】
+(2个苹果,放在1个盘子里)+(0个苹果,放在1个盘子里【每盘已经放入1个苹果】)【2】
所以:最后的放置方法有=5+3+2=10中方法
特殊情况,当盘子比苹果数目多时,把m个苹果放进n个盘子里,相当于,把m个苹果放进m个盘子里。
代码:
//放苹果******************#include <iostream>using namespace std;int app(int m, int n)//m代表苹果数目,n代表盘子数目{int i=0;int sum=0;if(n==1)return 1;for(i=m;i>=0;i=i-n){sum=sum+app(i,n-1);}return sum;}int main(){int m=0,n=0;cin>>m>>n;if(m>=n){cout<<app(m,n)<<endl;}else{cout<<app(m,m)<<endl;}return 0;}