zoukankan      html  css  js  c++  java
  • 放苹果

    题目描述

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

    输入描述:

    每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

    输出描述:

    对输入的每组数据M和N,用一行输出相应的K。

    分析:

    输入为m个苹果,n个盘子。求fun(m, n)现在分情况讨论:

    1. 当 n < m 时, 这时候一定会空出m - n个盘子,也就是说fun(m, n) = fun(m, m)
    2. 当 n >=m 时,这时候放法又可以分为至少空一个盘子和一个盘子都不空两种情况
      空一个盘子为fun(m, n - 1), 一个盘子都不空就相当于先每个盘子放一个苹果再把它们
      拿掉,放法和用剩下的m - n个苹果放进n个盘子一样,此时为fun(m - n, n).而总的方法
      为二者之和
      3.递归退出条件:一是n逐渐减小,减到1,一个盘子便只有一种放法,二是m逐渐减小
      减到0,也是一种放法。
    #include <iostream>
    using namespace std;
    
    int fun(int m, int n){
        if((m == 0) || (n == 1)) return 1;
        if(m < n) return fun(m, m);
        else return fun(m, n - 1) + fun(m - n, n);
    }
    
    int main(){
        int m, n;
        while(cin >> m >> n) {
            cout << fun(m, n) << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    python获取DBLP数据集
    GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
    Leetcode 1:two sum
    测试面试之如何测试一个杯子
    C++小总结
    统计‘1’的个数
    C语言小总结
    剑指offer面试题1---赋值运算符函数
    黑盒测试与白盒测试
    软件测试的原则
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10200812.html
Copyright © 2011-2022 走看看