题目描述:M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入:每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。

样例输入

7 3

样例输出

8

/**

* 计算放苹果方法数目

* 输入值非法时返回-1

* 1 <= m,n <= 10

* @param m 苹果数目

* @param n 盘子数目数

* @return 放置方法总数

*/

 分析:
        设f(m,n) 为m个苹果,n个盘子的放法数目,先对n作讨论:
        当n>m:f(m,n) = f(m,m) (必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响);
        当n<=m:不同的放法可以分成两类:
        1、有空盘子(至少一个盘子为空),把m个苹果放在除空盘外其余的盘子里,即相当于f(m,n-1); 
        2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,共拿走n*1个苹果,不影响不同放法的数目,即f(m-n,n)。
        而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
    递归出口条件说明:
        当n=1时,所有苹果必然放在一个盘子里,所以返回1;
        当没有苹果可放时,定义为1种放法;
        递归的两条路,第一条n会逐渐减少,终会到达出口n==1;
        第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.
package test;

import java.util.Scanner;

public class exam11 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
// m个苹果,n个盘子
int m = scanner.nextInt();
int n = scanner.nextInt();
System.out.println(putApple(m, n));
}
scanner.close();
} public static int putApple(int m, int n) {
if (m < 0 || n < 1) {
return 0;
} else if (m == 0 || n == 1) {
return 1;
} else if (m < n) {
return putApple(m, m);
} else {
// System.out.print(m);
return putApple(m, n - 1) + putApple(m - n, n);
}
}
}

java笔试之放苹果的更多相关文章

  1. Java笔试面试题整理第六波(修正版)

    转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  2. 应聘Java笔试时可能出现问题及其答案

    有感:应聘Java笔试时可能出现问题及其答案 huij 前段时间因为要参加一个笔试,在准备期间在网上找到了两条关于笔试题目的文章,其中一篇为<<有感:应聘Java笔试时可能出现问题> ...

  3. poj 1664 放苹果(dfs)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30284   Accepted: 19098 Description ...

  4. OpenJudge 666:放苹果 // 瞎基本DP

    666:放苹果 总时间限制:  1000ms     内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1 ...

  5. oj放苹果

    题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...

  6. POJ 1664 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24985   Accepted: 15908 Description ...

  7. POJ --- 1164 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24947   Accepted: 15887 Description ...

  8. POJ——放苹果

    4:放苹果 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示) ...

  9. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

随机推荐

  1. NX二次开发-UFUN创建球UF_MODL_create_sphere1

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建球 UF_FEATURE_SIGN ...

  2. NX二次开发-UFUN输入表达式TAG,得到表达式字符串UF_MODL_ask_exp_tag_string

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建表达式 tag_t NewExpTag ...

  3. ParameterizedThreadStart task

    using System;using System.Diagnostics;using System.Threading;using System.Threading.Tasks; namespace ...

  4. python学习8—函数之高阶函数与内置函数

    python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...

  5. LeetCode 67. Add Binary【个位补0,不必对齐】【easy】

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  6. 312. 戳气球【困难】【区间DP】

    题目链接 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * ...

  7. Spring MVC @RequestParam(5)

    案例来说明 1 @RequestMapping("user/add") 2 public String add(@RequestParam("name") St ...

  8. mysql tar安装模式

    mysql解压版安装过程,之前安装mysql一直用linux yum和rpm方式.今天试了下tar包方式有点麻烦记录下1.安装lrzsz-0.12.20-27.1.el6.x86_64.rpm方便操作 ...

  9. java 对象转Map方法Demo

    /** * 用于对Object进行解析并且转换成Map键值对的形式 * */ public class ObjectUtils { private static final String JAVAP ...

  10. x25, PF_X25 - ITU-T X.25 / ISO-8208 协议接口。

    总览 #include <sys/socket.h> #include <linux/x25.h> x25_socket = socket(PF_X25, SOCK_SEQPA ...