北大oj—1664——放苹果

此题使用递归digui(m,n)

递归结束条件是:

苹果个数M为0或1,只有一种放法,reutun 1;

盘子个数N为1,只有一种放法,reutun 1;

然后,M个苹果,N个盘子时,可分为两种情况:

一、M>N,则:

1、每个盘子放一个苹果,剩余m-n个苹果再放,即为digui(m-n,n);

2、空下一个盘子,其余的盘子放苹果,即为digui(m,n-1);

二、M

即可解决。

注:digui(m,n)这个函数指的是一种解决方法!且要把情况考虑完全!

附上源代码:

#include
int digui(int m,int n)
{
   if(m==0||m==1)
	   return 1;
   if(n==1) 
	   return 1;
   if(m<n)
       n=m;
   if(m>=n)
       return digui(m,n-1)+digui(m-n,n);
}
int main()
{ 
    int m,n,a;
	scanf("%d",&a);
	while(a--)
	{
	   scanf("%d %d",&m,&n);
	   printf("%d\n",digui(m,n));
	}
	return 0;
}

你可能感兴趣的:(北大OJ)