首页 > 移动平台 > 详细

放苹果(HJ61)

时间:2020-08-03 16:31:24      阅读:111      评论:0      收藏:0      [点我收藏+]

一:解题思路

f(m,n) 为m个苹果,n个盘子的方法数目。

递归出口说明:当m=0 || n=1 只有一种放法。

当n>m时:必定至少有n-m个盘子永远空着,去掉他们对摆放苹果数目不产生影响。即 if(n>m) f(m,n)=f(m,m)

当n<=m时:不同的方法可以分成2类:

1.至少一个盘子空着,即相当于f(m,n)=f(m,n-1)

2.所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同的方法的数目,即f(m,n)=f(m-n,n)

二:完整代码示例 (C++版和Java版)

C++:

#include <iostream>

using namespace std;

int apples(int m, int n)
{
    if (m == 0 || n == 1)
        return 1;
    if (m < n)
        return apples(m, m);
    else
        return apples(m, n - 1) + apples(m-n,n);
}

int main()
{
    int m = 0;
    int n = 0;

    while (cin >> m >> n)
    {
        cout << apples(m,n) << endl;
    }

    return 0;
}

放苹果(HJ61)

原文:https://www.cnblogs.com/repinkply/p/13426647.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!