package com.study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; /**
*
* @author acer
* @date 2014-09-15
*
* m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
*
* 思路解析:
* step1:每个筐里先放一个苹果,剩余m-n个苹果
* step2:m-n个苹果最多放在m-n个筐里,由于所有的筐都认为是一样的,将筐编号为1-n,
* 后面的筐里放的苹果必须大于等于前面筐里的苹果数。设剩余苹果数为left,剩余要
* 放的筐为n,前一个筐里的苹果数为first。则每次放完当前一个后,向后继续放
* 递归函数:D(int first,int n,int left);
示例:8个苹果放入3个筐里
step1:每个筐先放一个,剩余5个
step2:5个苹果放到3个筐里,可能的方法为:(005)(014)(023)(113)(122)
*/
public class DistributeApple { public static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
while(true){
count=0;
System.out.print("请输入苹果数:");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader bf=new BufferedReader(isr);
String numString=null;
try {
numString = bf.readLine().toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int num1=Integer.parseInt(numString); System.out.print("请输入筐数:");
try {
numString=null;
numString = bf.readLine().toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int num2=Integer.parseInt(numString); DistributeApple da=new DistributeApple();
if(num1>num2){
da.distributeApple(0, num2, num1-num2);
}else if(num1==num2){
count++;
}
System.out.println("一共有"+count+"种放法");
}
} public DistributeApple(){ } void distributeApple(int first, int n, int left){
//first:第一个筐的苹果数 n:筐的数量 left:剩余苹果
if(n==0){
return;
}else if(n==1){
count++;
System.out.println( first+" "+ n+" "+ left +" "+count); }else{
for(int k=first;k<=left/n;k++)
distributeApple(k,n-1,left-k);
} } }

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. Bluetooth in Android 4.2 and 4.3(三):Enable Bluetooth

    以下是基于Android 4.2代码,对Bluetooth BR/EDR Enable process的分析.BluetoothAdapter类代表的是local device Bluetooth a ...

  2. 问题分析探讨 --> 大约有700W数据的表,把当天的10W数据select导入新表,整个原来的表就锁死

    Sun shine  16:15:55 帅哥  我有个手机表 大约有700百数据,,每天新增 大约五万,并且新也有update 大约10万  然后 我每晚 把当天的数据select 导入一个新表中的时 ...

  3. [转] 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7

    PS:war 部署路径:/var/lib/tomcat7/webapps http://www.linfuyan.com/how-to-install-apache-tomcat7-on-ubuntu ...

  4. jQuery免费资料

     JQvery免豆.pdf       jQuery实战之仿flash跳动的按钮效果[源码]http://down.51cto.com/data/188600JQuery 1.4.2 手册简体中文版h ...

  5. C# Obsolete

    Obsolete 属性将某个程序实体标记为一个建议不再使用的实体.每次使用被标记为已过时的实体时,随后将生成警告或错误,这取决于属性是如何配置的 如果把false 改成 true 的话那么GetNam ...

  6. 安卓UI美化_drawable

    UI美化 drawable资源 ------------------------------------------state drawable资源在不同状态下显示不同的图片在<selector ...

  7. StringBuffer与StringBuilder之间的区别

    public class Test { public static void main(String[] args) { StringBuffer strBuffer = new StringBuff ...

  8. Atom编辑器入门到精通(五) Git支持

    版本控制对于开发来说非常重要,Atom当然也提供了很好的支持,本文将介绍如何在Atom中集成使用Git和GitHub 恢复文件 当你修改了某个文件,然后发现改得不满意,希望恢复文件到最后一次提交的状态 ...

  9. MVC中,查询以异步呈现,分页不用异步的解决方案

    MVC中,查询以异步呈现,分页不用异步的解决方案 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 < ...

  10. C#数据类型转换的几种形式

    1.隐式转换:一般是低类型向高类型转化,能够保证值不发生变化. 隐式数值C#数据类型转换: 从 sbyte 到 short.int.long.float.double 或 decimal. 从 byt ...