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;
    }
    
  • 相关阅读:
    dnn
    DATAGRID学习
    在.net下的换行符
    treeview
    《25项最优时间管理工具与技巧》
    vim常用操作
    【Google给毕业生的忠告】
    MySQL的安装、使用及权限管理
    各种国际化标准组织
    ubuntu thunderbird 邮箱 163 配置 不能发送问题
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10200812.html
Copyright © 2011-2022 走看看