题目:
解题思路:
经过观察可以发现这个问题可以分化缩小,当苹果和盘子很小时问题就会变得比较简单了
所以可以运用递归进行问题的分化缩小
代码:
#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;
}