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. css制作小三角

    视觉稿中经常有些小三角,如下图.每次用图片做太不方便了,我们看看用css实现的效果(支持ie6,7哦) <style> /*border实现三角*/ /*箭头向上*/ .arrow-top ...

  2. create---创建表

    create table table_name (列名 数据类型 是否非空 约束信息, 列名 数据类型 是否非空 约束信息, 列名 数据类型 是否非空 约束信息, ........); 例: crea ...

  3. AWS IAM (Identity and Access Management) 使用笔记

    为 AWS 管理控制台登录页面 URL 创建别名 $ aws iam create-account-alias --account-alias <value> 创建用户 $ aws iam ...

  4. centos 下安装ati显卡驱动方法

    1)到ati的官网(http://support.amd.com/us/gpudownload/Pages/index.aspx)下载相应的驱动,一定要注意 radeon系列和mobility rad ...

  5. wampserver修改mysql密码后phpmyadmin登陆错误处理方法

    首先针对wampserver这个软件来说,是很方面的! 在进行使用时都会涉及到关于mysql数据管理系统的相关密码的修改,这个当然修改是很简单,当时没有想那么多,想为自己的mysql添加一个密码,方式 ...

  6. Unity3D 之3D游戏入门Hello world(一)

    这几天开始玩Unity3D 有关3D的内容了,去年开始玩过一段时间的2D制作,不过因为年初找工作,所以放了一段时间, 现在再捡起来发现忘的已经差不多了,只能再从头开始,所以就从3D开始算了.下面是3D ...

  7. C#微信公众号开发 -- (二)验证成为开发者

    接下来就是验证成为开发者了.先来看一下验证的界面及需要填写的信息 在接口配置信息中填写需要处理验证信息的页面或者一般性处理文件,这里以aspx页面为例 URl中的格式为:http://XXX.com/ ...

  8. Android no such table (找不到表)

    今天在学习项目时,一直报错no such table Users.说找不到Users表.我就纳闷了,数据库是复制过去的,检查表名也没有写错.这是怎么回事呢?检查了半天才发现原来是数据库的路径错了. 我 ...

  9. java将Excel文件(xlsx,xls)转换为csv文件

    http://blog.csdn.net/bryan__/article/details/40715309

  10. mysql数据库文件默认保存目录(windows)

    如果没有自己去设置安装路径,MYSQL默认安装在C:/Program Files/MySQL/MySQL Server 5.1,新建的数据库文件在C:/Documents and Settings/A ...