(11)分苹果问题:将m个相同的苹果放到n个相同的盘子中,多少钟分法?

这里写图片描述

分两种方向考虑:1)有盘子空着
2)所有的盘子上都有苹果
另外,如果盘子的个数大于苹果的个数,也要考虑进去。直接把多余的盘子拿掉,对结果是没有影响的。

#include<iostream>
using namespace std;

int count(int m, int n){//主要是运用递归的思想

    if (m <= 1 || n <= 0)
        return 1;

    //当盘子数多于苹果数的时候,就算每个盘子里只放一个苹果
    //那还是有多余的盘子,这些多余的盘子对计算结果无影响,
    //所以,相当于count(m,n)=count(m,m)
    if (m < n)
        return count(m, m);

    //当苹果数大于盘子数时,分两种考虑
    //1)至少有一个盘子空着的时候,那么这个空着的盘子就是多余的,可以拿掉
    //相当于count(m,n)=count(m,n-1)
    //2)当每个盘子里都有苹果的时候,那么我可以把每个盘子里都拿掉一个苹果
    //变成了m-n个苹果放在n个盘子里。
    else
        return count(m, n - 1) + count(m - n, n);
}

void main(){

    int apples, plates;
    cin >> apples >> plates;
    count(apples, plates);

    system("pause");
    return;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值