1. package com.study;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5.  
  6. /**
  7. *
  8. * @author acer
  9. * @date 2014-09-15
  10. *
  11. * m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
  12. *
  13. * 思路解析:
  14. * step1:每个筐里先放一个苹果,剩余m-n个苹果
  15. * step2:m-n个苹果最多放在m-n个筐里,由于所有的筐都认为是一样的,将筐编号为1-n,
  16. * 后面的筐里放的苹果必须大于等于前面筐里的苹果数。设剩余苹果数为left,剩余要
  17. * 放的筐为n,前一个筐里的苹果数为first。则每次放完当前一个后,向后继续放
  18. * 递归函数:D(int first,int n,int left);
  19. 示例:8个苹果放入3个筐里
  20. step1:每个筐先放一个,剩余5个
  21. step2:5个苹果放到3个筐里,可能的方法为:(005)(014)(023)(113)(122)
  22. */
  23. public class DistributeApple {
  24.  
  25. public static int count=0;
  26. public static void main(String[] args) {
  27. // TODO Auto-generated method stub
  28. while(true){
  29. count=0;
  30. System.out.print("请输入苹果数:");
  31. InputStreamReader isr=new InputStreamReader(System.in);
  32. BufferedReader bf=new BufferedReader(isr);
  33. String numString=null;
  34. try {
  35. numString = bf.readLine().toString();
  36. } catch (IOException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40. int num1=Integer.parseInt(numString);
  41.  
  42. System.out.print("请输入筐数:");
  43. try {
  44. numString=null;
  45. numString = bf.readLine().toString();
  46. } catch (IOException e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. }
  50. int num2=Integer.parseInt(numString);
  51.  
  52. DistributeApple da=new DistributeApple();
  53. if(num1>num2){
  54. da.distributeApple(0, num2, num1-num2);
  55. }else if(num1==num2){
  56. count++;
  57. }
  58. System.out.println("一共有"+count+"种放法");
  59. }
  60. }
  61.  
  62. public DistributeApple(){
  63.  
  64. }
  65.  
  66. void distributeApple(int first, int n, int left){
  67. //first:第一个筐的苹果数 n:筐的数量 left:剩余苹果
  68. if(n==0){
  69. return;
  70. }else if(n==1){
  71. count++;
  72. System.out.println( first+" "+ n+" "+ left +" "+count);
  73.  
  74. }else{
  75. for(int k=first;k<=left/n;k++)
  76. distributeApple(k,n-1,left-k);
  77. }
  78.  
  79. }
  80.  
  81. }

m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法的更多相关文章

  1. m个苹果放在n个盘子里面有多少种放法?(动态规划)

    m个苹果放在n个盘子里面有多少种放法?(动态规划) 实现代码如下: #include <iostream> using namespace std; int s(int m ,int n) ...

  2. 放苹果问题 DP计数 m个苹果放在n个盘子里,苹果,盘子相同,盘子可为空

    详细的解释放苹果问题的链接:苹果可相同可不同,盘子可相同可不同,盘子可空和不可空,都有详细的说明··· http://www.cnblogs.com/celia01/archive/2012/02/1 ...

  3. m个苹果放在n个盘子中有多少种结果

    题目 m个苹果放在n个盘子中有多少种结果,前置条件: 允许存在空盘 重复的摆放结果忽略不计 根据题意,也就是有3种情况,的确完全重复的摆放方式是没多大意义的 思路 这题可以用枚举的描述方式进行尾递归求 ...

  4. 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用

    因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码  https ...

  5. Qt里获取目录的一个另类方法

    如果有一个文件的全路径文件名, 想获取它的路径的话, qt里我没找到比较好的办法, 都是cleanPath后, 再用QString的find, left这种函数来处理. 今天又在搞这种问题的时候, 看 ...

  6. form表单里如果只存在一个文本框,enter键提交

    在这里说一说浏览器里form表单的默认行为 我们都知道浏览器是存在很多默认行为的,可能是出于常用行为考虑又或者是历史原因.但有时候我们不需要这些默认行为.以下: 1).当form表单里只存在一个inp ...

  7. 如何在一个div标签里显示出另一个网页? <iframe src=" http://www.baidu.com " width="800px" height="200px" scrolling="no" frameborder="0"> </iframe>

    如何在一个div标签里显示出另一个网页? 用在div里用iframe,就像下面的代码 <iframe src=" http://www.baidu.com " width=& ...

  8. 关于Android Studio里的Gradle,你所需要知道的都在这里了

    Gradle介绍 Gradle是一个先进的build toolkit,可以方便的管理依赖包和定义自己的build逻辑.到底有多先进,Android Studio官方集成Gradle,Google还专门 ...

  9. Javascript里,想把一个整数转换成字符串,字符串长度为2

    Javascript里,想把一个整数转换成字符串,字符串长度为2.  想把一个整数转换成字符串,字符串长度为2,怎么弄?比如 1 => "01"11 => " ...

随机推荐

  1. iOS中的imageIO与image解码

    ImageIO对外开放的对象有CGImageSourceRef.CGImageDestinationRef,不对外开放的对象有CGImageMetadataRef.CoreGraphics中经常与im ...

  2. 玩转Android之数据库框架greenDAO3.0使用指南

    用过ActiveAndroid.玩过ORMLite,穿过千山万水,最终还是发现greenDAO好用,ActiveAndroid我之前有一篇文章介绍过 玩转Android之数据库框架ActiveAndr ...

  3. 编译LFS

    成功编译并运行linux from scratch 7.7 system,有必要作下总结.本次用的编译LFS的环境是: 虚拟机是virtalbox宿主系统为CentOS 7.0 x86_64 (cor ...

  4. (转)Eclipse中junit框架的使用——单元测试

    [转]junit浅学笔记一 JUnit是一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How ...

  5. jQuery Validate验证框架使用

    jQuery Validate使用前的准备,需要下载相应js包括:1.jquery.validate.min.js.2.additional-methods.min.js. 当然必不可少的js jQu ...

  6. ref与out之间的区别整理

    ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.re ...

  7. 网易游戏QA工程师笔试回忆-2012.9【个人题解】

    ========================转帖======================== 网易游戏QA工程师笔试回忆-2012.9 刚刚从武大回来,趁热回忆下题目,给以后的XDJMs参考. ...

  8. 遇到autoreconf: not found

    sudo apt-get install autoconf automake libtool

  9. c#汉字与编码之间的转换(输出十六进制)

    /******************************************************************/ /*********************** ****** ...

  10. 【笔记】mongodb启动不了:child process failed, exited with error number 100

    今天在启动mongodb的时候,发现起不来,报错:child process failed, exited with error number 100然后先去/var/log/mongo/mongod ...