题解 | #放苹果#
放苹果
http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
//用递归
//当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)
//当n<=m:放法可以分成两类:
//1、有一个空盘子,记,放法f1 = f(m,n-1);
//2、没有空盘子,所有盘子都有1个苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,记,放法f2 = f(m-n,n).
//而总的放苹果的放法数目等于两者的和,即 f(m,n) = f1 + f2 = f(m,n-1)+f(m-n,n)
#include<stdio.h>
int f(int m,int n){
int method;
if(m==0||n==1)
method=1;
else if (n>m)
method=f(m,m);
else if (n<=m)
method=f(m,n-1)+f(m-n,n);
return method;
}
int main(){
int m,n;
scanf("%d %d",&m,&n);
int method;
method=f(m,n);
printf("%d",method);
}