将M个苹果放在N个盘子里,允许有空盘,但1,5,5和5,5,1视作一种方法
输入:苹果数 盘子数
输出:一共可以排放的方法
#include <iostream>
using namespace std;
int cal(int m, int n)
{
if (m < 0)
return 0;
else if (m == 0 || n == 1)
return 1;
else
return cal(m - n, n) + cal(m, n - 1);
}
int main()
{
int apple,disk;
cin >> apple>>disk;
cout << cal(apple, disk);
return 0;
}
这一题用到了递归的思想,程序很简洁。
递归要快快学起来啊!感觉最重要的还是要有相应的算法思路,这里分析时就会将苹果的摆放方法分成两类:有空盘vs无空盘
有空盘意味着至少有一个盘子为空,就是要算m,n-1的方法数,无空盘意味着每个盘子至少有一个,也就是要算m-n,n的方法数。