摆苹果(递归)

题目:

在这里插入图片描述

解题思路:

经过观察可以发现这个问题可以分化缩小,当苹果和盘子很小时问题就会变得比较简单了
所以可以运用递归进行问题的分化缩小

代码:

#include <stdio.h>
int apple(int m,int n)
{
    if(m==0||n==1)//分到规模最小时可以直接给出摆放方式
        return 1;
    else if(m<n)//当苹果少于盘子时(可以看成m个苹果在m个盘子里面摆)
        return apple(m,m);
    else//否则苹果多于盘子(分成“都摆”和“不都摆”两种方式相加)
        return apple(m-n,n)+apple(m,n-1);//“都摆”可以先在每个盘子里先放一个,再用剩下的苹果去摆
        //”不都摆“可以先拿出一个盘子不放苹果,用苹果在剩下的盘子里摆(这并不意味着剩下的盘子里一定要摆)
}
int  main()
{
    int t;
    int num;
    scanf("%d",&t);
    while(t--)
    {
        int m,n;
        scanf("%d %d",&m,&n);
        num=apple(m,n);//递归函数计算摆放方式
        printf("%d\n",num);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值