放苹果

题目描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入

每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。

样例输入

7 3

样例输出

8

/**

  • 计算放苹果方法数目

  • 输入值非法时返回-1

  • 1 <= m,n <= 10

  • @param m 苹果数目

  • @param n 盘子数目数

  • @return 放置方法总数

*/

public static int count(int m, int n)

输入描述:

输入两个int整数

输出描述:

输出结果,int型

示例1

输入
7 3
输出
8

思路

链接:https://www.nowcoder.com/questionTerminal/bfd8234bb5e84be0b493656e390bdebf
来源:牛客网

/*

放苹果分为两种情况,一种是有盘子为空,一种是每个盘子上都有苹果。

令(m,n)表示将m个苹果放入n个盘子中的摆放方法总数。

1.假设有一个盘子为空,则(m,n)问题转化为将m个苹果放在n-1个盘子上,即求得(m,n-1)即可

2.假设所有盘子都装有苹果,则每个盘子上至少有一个苹果,即最多剩下m-n个苹果,问题转化为将m-n个苹果放到n个盘子上

即求(m-n,n)

综上所述:

(m,n)=(m,n-1)+(m-n,n);

*/

#include
using namespace std;
#include
#include
int putapples(int m, int n);
int main() {
    int num1,num2;
    while (cin>>num1>>num2)
    {
        int result=putapples(num1, num2);
        cout << result << endl;
    }
}
//m 苹果,n 盘子
int putapples(int m, int n) {
    //没有苹果
    if (m < 0) {
        return 0;
    }
    /*
    m==1,只有1个苹果
    n==1,只剩下一个盘子
    */
    if (m == 1 || n == 1) {
        return 1;
    }
    /*
    1个空盘子,没有空盘子。一个空盘子的对立面是一个空盘子都没有。
    putapples(m, n - 1) 只有1个空盘子
    putapples(m-n,n) 一个空盘子都没有
    */
    return putapples(m, n - 1) + putapples(m-n,n);
}

你可能感兴趣的:(放苹果)