题解 | #放苹果#

放苹果

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);
}
全部评论

相关推荐

码农索隆:想看offer细节
点赞 评论 收藏
分享
07-01 17:14
中北大学 Java
兄弟们是真是假
牛客46374834...:我在boss上投java岗从来没成功过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务