描述 | |
---|---|
知识点 | 循环 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 |
输入两个int整数 |
输出 |
输出结果,int型 |
样例输入 | 7 3 |
样例输出 | 8 |
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sca = new Scanner(System.in);
int m = sca.nextInt();
int n = sca.nextInt();
sca.close();
int result = count(m,n);
if(result == -1)
{
return;
}
System.out.println(result);
}
/**
* 计算放苹果方法数目
* 输入值非法时返回-1
* 1 <= m,n <= 10<><= m,n <= 10<>
* @param m 苹果数目
* @param n 盘子数目数
* @return 放置方法总数
*
*/
public static int count(int m, int n)
{
if((m < 0)||(m > 10)||(n < 1)||(n > 10))
{
return -1;
}
return getResult(m,n);
}
public static int getResult(int m, int n)
{
//当苹果味0或者盘子只有一个的时候,就只有一种放法
if(m==0||n==1)
return 1;
//盘子数多于苹果数的时候,多于的盘子不会对分法产生影响,所以可以直接去掉,取较小的苹果数量来求
if(n>m)
return getResult(m,m);
//盘子数少于苹果数的时候,可以分为至少有一个盘子空着,则为getResult(m,n-1)(去掉空盘子数量);没有盘子空着则可以在每个盘子拿走一个苹果,对分法没//有影响为getResult(m-n,n)
else
return getResult(m,n-1)+getResult(m-n,n);
}
}
用到的是递归算法,对递归算法很不敏感,这个算法是在网上找到的,看了算法就容易想到递归了;虽然之前也想过用递归,但是构建不起来……