题解 | #放苹果#
放苹果
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);
}
}
}


查看27道真题和解析