题解 | #放苹果#

放苹果

http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

C++实现,解题思路主要分为两点:1、将本题转化为递归去解决;2、递归的代码实现,找到递归终止条件
1、放苹果问题可以分为两种情况,当苹果数m小于盘子数n时,多余的盘子没有用,对于排列的种类数量没有影响,可以令n=m;
                              当苹果数大于等于盘子数时,以盘子数i=1:n为循环放苹果,即i个盘子里至少有1苹果;
   此时问题简化为了,m-i个苹果放在i个盘子里的问题,调用自身递归
2、找到递归的终止条件:当盘子n=1时只有一种情况,即所有苹果放1个盘子里,排列组合总数+1;
                       当苹果m=1时,不管盘子有多少,只能放任意一个,排列组合数+1;
                       当苹果m=0时,空盘放置,排列组合数+1;

#include<iostream>
using namespace std;

int num=0;        //定义全局变量,记录排列组合数

void Ways(int a,int b)
{
    if(a<b)    b=a;
    if(a==1||b==1||a==0){
        num++;
        return;
    }
    for(int i=1;i<=b;++i)    Ways(a-i, i);
    return;
}

int main()
{
    int m=0,n=0;
    while(cin>>m>>n)
    {
        Ways(m, n);
        cout<<num<<endl;
        num=0;
    }
    return 0;
}

全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
8
1
分享
牛客网
牛客企业服务