放苹果

来源:互联网 发布:域名污染 gfw 编辑:程序博客网 时间:2024/06/02 12:38

描述

题目描述

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

 

输入

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

 

样例输入

7 3

 

样例输出

8

    

/**

     * 计算放苹果方法数目


     * 输入值非法时返回-1

     * 1 <= m,n <= 10<><= m,n <= 10<>

     * @param m 苹果数目

     * @param n 盘子数目数

     * @return 放置方法总数

     * 

     */

    public static int count(int m, int n)

 

 

 

知识点循环运行时间限制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);    }}
用到的是递归算法,对递归算法很不敏感,这个算法是在网上找到的,看了算法就容易想到递归了;虽然之前也想过用递归,但是构建不起来……

0 0
原创粉丝点击