题目:放苹果
M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放。
1<=M<=10,1<=N<=10
例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法
输入 7 3
输出 8
解题思路
这道题类似于整数划分的题目,这是很早的一道ACM的题目,主要思路就是考递归。
①当苹果数目或者篮子数目为1时候,就只有一种可能
②当苹果数目小于篮子数目的时候,按照苹果数目来分配
③当苹果数目大于篮子数目的时候,空一个盘子 + 先每个盘子放一个之后再m-n个随便放
④当苹果数目等于篮子数目的时候,每个盘子放一个 + 空一个盘子
#include<iostream>
using namespace std;
int sharingApple(int m,int n)
{
if(m==1||n==1) return 1;
if(m<n) return sharingApple(m,m);
else if(n==m) return 1+sharingApple(m,n-1);
else return sharingApple(m-n,n)+sharingApple(m,n-1);
}
int main()
{
int n,m;
cin>>m>>n;
cout<<sharingApple(m,n)<<endl;
}