【华为OJ】【080-放苹果】

来源:互联网 发布:Js识别 key value 编辑:程序博客网 时间:2024/05/22 00:25

【华为OJ】【算法总篇章】


【华为OJ】【080-放苹果】

【工程下载】


题目描述

把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) {    return 0;}

输入描述

输入两个int整数

输出描述

输出结果,int型

输入例子

7 3

输出例子

8

算法实现

import java.util.Scanner;/** * Author: 王俊超 * Date: 2016-01-03 20:56 * Declaration: All Rights Reserved !!! */public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));        while (scanner.hasNext()) {            int m = scanner.nextInt();            int n = scanner.nextInt();            System.out.println(findWays(m, n));        }        scanner.close();    }    private static int findWays(int m, int n) {        int[] result = {0};        for (int i = 1; i <= n; i++) {            findWays2(m, m - i + 1, 1, i, result);        }        return result[0];    }    /**     * 有n个变量,其和为m,求有多少种解法,每个解的变量按从大到小取值,最小为1     *     * @param m      第i个变量实际可以取的最大值     * @param curMax 可以取的最大值     * @param i      第i个变量     * @param n      总计有n个变量     * @param result 结果统计     */    private static void findWays2(int m, int curMax, int i, int n, int[] result) {        if (m > 0 && m <= curMax && i == n) {            result[0]++;            return;        }        if (m < 1 || curMax < 1 || i > n) {            return;        }        for (int v = curMax; v > 0; v--) {            findWays2(m - v, v, i + 1, n, result);        }    }}
1 0
原创粉丝点击