题解 | #放苹果#

放苹果

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;
}

全部评论

相关推荐

昨天 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
评论
8
1
分享
牛客网
牛客企业服务