华为上机--放苹果

来源:互联网 发布:别墅网络覆盖方案 编辑:程序博客网 时间:2024/06/01 09:51

对于m个苹果,n个盘子f(m,n):

如果m<n,那么就跟m个盘子,m个苹果是一样的f(m,m)。

如果m>n,那么有两种情况:一种有空盘子的情况,一种没有空盘子的情况,两种情况不重叠且加一起一定为情况总数。

第一种情况:m个苹果放在n-1个盘子里,因为至少有1个空盘子,即f(m,n-1)

第二种情况:每个盘子都至少有一个苹果,m-n个苹果再放到n个盘子里,即f(m-n,n)。

由上面两种情况得到递归式f(m,n)=f(m,n-1)+f(m-n,n)。

代码:

import java.util.Scanner;public class Main {public static int fways(int m, int n) {if (m == 0 || n == 1)return 1;if (m < n)return fways(m, m);elsereturn fways(m, n - 1) + fways(m - n, n);}public static void main(String args[]) {Scanner input = new Scanner(System.in);while (input.hasNext()) {String line = input.nextLine();String[] arrays = line.split(" ");System.out.println(fways(Integer.parseInt(arrays[0]),Integer.parseInt(arrays[1])));}}}


0 0
原创粉丝点击