题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case //题目翻译:将m分成n个数的和,求有多少种分法 int m = in.nextInt(); int n = in.nextInt(); int res=func(m,n); System.out.println(res); } } public static int func(int m,int n){ //苹果数为0,什么也不做看成是1种方案 if(m==0){ return 1; } if(n==0){ return 0; } //苹果数量小于盘子数量,等价于m个苹果放到m个盘子里,比如3个苹果,5个盘子,最多按3个盘子放 if(m<n){ return func(m,m); }else{ //每次放苹果时有两种情况:无空盘子(每个拿出一个来,不影响放法,但成功使m向边界移动)有空盘子(至少有一个空盘子,使n向边界条件移动,选择空1个是有空盘子种最多的放法) return func(m-n,n)+func(m,n-1); } } }