Annette_wang 2021-03-10 13:17 采纳率: 91.7%
浏览 215
已结题

程序可以运行,但是输入数值后,无法输出结果,问题在哪?

放苹果(盘子相同)

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

输入

苹果个数m 和盘子个数n(0<=M,1<=N<=10)

输出

不同的放法数目

 借鉴的思路,分两种可能:一种是苹果数大于等于盘子数,第二种是苹果数小于盘子数。f(m,n)是求方法数的函数。

       当m < n时,一定会有(n-m)个盘子空着,或者说至少会有(n-m)个盘子空着,这几个盘子对于接下来的苹果摆放一点影响都没有,直接去掉他们。所以有了 return f(m, m); 剩下的盘子数等于苹果数等于m.
       当m >= n时,又可以分为两类:一类时有盘子为空(也就是包含0),第二类时盘子都不为空(不包含0)。
第一类(含0):肯定至少有一个盘子是空着的,所以就是 f(m, n-1)
第二类(不含0):先把每个盘子都放一个苹果,这放上去的n个苹果对剩下的苹果摆放没有影响,直接去掉即可,所以有f(m-n, n);

递归出口:
n == 1 所有苹果都放到一个盘子里 (这里f(m,n)可以看作是把m个苹果放到n个盘子上)
m == 0 没有苹果的时候

代码:  */
#include<iostream>
using namespace std;

int f(int m, int n)
{
    if (m == 0 || n == 1)
    {
        return 1;
    }
    else if (m < n)
    {
        return f(m, m);
    }
    else if (m >= n)
    {
        return f(m, n-1)+f(m-n, n);
    }
}
int main(){
int m,n;
cin>>m>>n;
cout<<f(m,n);
return 0;
}

  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-03-10 14:37
    关注

    我这边有输出结果。 

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)