zoukankan      html  css  js  c++  java
  • 12-分苹果(递归)

    Description

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

    Input

    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

    Output

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

    Sample Input

    1
    7 3
    

    Sample Output

    8
    #include <iostream>
    using namespace std;

    int f(int n, int m){
        if(n < m)           //苹果少于盘子时,相当余,将多的盘子放一边不管,反正用不上,
            return f(n, n);        //相当于将n个苹果放到n个盘子中随意放有多少种
        if(n == 0)
            return 1;       //没有苹果就都空,所以一种
        if(m == 0)
            return 0;      //有苹果无盘子放,方法放,
        return f(n, m-1) + f(n-m, m); //前一半是保证至少有一个空(先空一个,然后去放入m-1个盘子),
                                      //后一半是保证都非空,先一个盘子放一个(肯定非空了),再去将生的n-m个苹果放在任意盘子上
    }

    int main(){
        int n, m, c;
        cin >> c;
        while(c--){    
            cin >> n >> m;
            cout << f(n, m) << endl;
        }
        return 0;
    }
  • 相关阅读:
    Google Map API基本概念(转载)很好的例子
    Sql Exception Handling & Throw Exception
    幸福人生讲座(十):五伦中哪一伦最重要?
    Delete Database Log
    杨澜语录
    余世雄 如何提升职场“执行力”
    红楼女梦
    假如我真的看透了
    余世维 有效沟通
    习惯修养
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7347626.html
Copyright © 2011-2022 走看看