题目:

摆苹果(递归)

解题思路:

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

代码:

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-09-01
  • 2021-08-26
  • 2021-11-06
  • 2022-12-23
  • 2021-10-22
猜你喜欢
  • 2021-08-28
  • 2021-09-17
  • 2021-10-01
  • 2021-08-16
  • 2021-08-01
  • 2021-05-26
  • 2022-12-23
相关资源
相似解决方案