(11)分苹果问题:将m个相同的苹果放到n个相同的盘子中,多少钟分法?

分两种方向考虑:1)有盘子空着
2)所有的盘子上都有苹果
另外,如果盘子的个数大于苹果的个数,也要考虑进去。直接把多余的盘子拿掉,对结果是没有影响的。

#include
using namespace std;

int count(int m, int n){//主要是运用递归的思想

    if (m <= 1 || n <= 0)
        return 1;

    //当盘子数多于苹果数的时候,就算每个盘子里只放一个苹果
    //那还是有多余的盘子,这些多余的盘子对计算结果无影响,
    //所以,相当于count(m,n)=count(m,m)
    if (m < n)
        return count(m, m);

    //当苹果数大于盘子数时,分两种考虑
    //1)至少有一个盘子空着的时候,那么这个空着的盘子就是多余的,可以拿掉
    //相当于count(m,n)=count(m,n-1)
    //2)当每个盘子里都有苹果的时候,那么我可以把每个盘子里都拿掉一个苹果
    //变成了m-n个苹果放在n个盘子里。
    else
        return count(m, n - 1) + count(m - n, n);
}

void main(){

    int apples, plates;
    cin >> apples >> plates;
    count(apples, plates);

    system("pause");
    return;
}

你可能感兴趣的:(代码小集合)