0
点赞
收藏
分享

微信扫一扫

笔试算法《放苹果》


描述
题目描述

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

数据范围:0<=m<=10,1<=n<=10。
本题含有多组样例输入。

输入描述
输入两个int整数

输出描述
输出结果,int型

示例1
输入:
7 3

输出
8

代码

public class Huawei放苹果 {

public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String mStr;
while (null != (mStr = br.readLine())) {
int m = Integer.parseInt(mStr.split(" ")[0]);
int n = Integer.parseInt(mStr.split(" ")[1]);
System.out.println(fun(m, n));

}
}

/**
* 动态规划+递归
*
* @param m
* @param n
* @return
*/
public static Integer cal(int m, int n) {
//因为允许有空盘子空着不放所以这里m可以等于0
if (n == 1 || m == 0) {
return 1;
} else if (n > m) {
return cal(m, m);
} else return cal(m, n - 1) + cal(m - n, n);
}

/**
* 第二种递归
*/
public static int fun(int a, int b) {
if (a < 0 || b < 0)
return 0;
else if (a == 1 || b == 1)
return 1;
else
// 分情况讨论:有一个空盘子或者没有空盘子
return fun(a, b - 1) + fun(a - b, b);
}
}


举报

相关推荐

0 条评论