题解 | #放苹果#

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

/*
 * https://blog.nowcoder.net/n/c9bc6821b3cd469b9cdb56469809e946
 */
#include <stdio.h>

int cal(int m, int n)
{
    //printf("m[%d]  n[%d] ", m, n);
    if ((m <= 1) || (n == 1)) {   /* 特殊情况1,只有一个盘子或者只有一个苹果,或者没有苹果 */
        return 1;
    } else if (m < n) {   /* 特殊情况2: 问题转换,苹果比盘子少, cal(m,m)和cal(m,n)的结果一样,因为始终有一个空盘子*/
        return cal(m,m);
    } else {
        /* 正常情况,分两部分,1,至少一个盘子为空, 全部不为空,求和即得到全集
         * 其中至少一个盘子不为空,可以看成1,2,3.。。个盘子不为空,
          *多个盘子为空可以看成是1个盘子为空的特殊情况,包含关系,所以只有一项 cal(m,n-1)。
         */
        return cal(m,n-1) + cal(m-n, n);
    }
}

int main() {
    int m, n;
    int sum = 0;

    while(scanf("%d %d", &m, &n) != EOF) {

        sum = cal(m, n);

        printf("%d", sum);
    }


    return 0;
}

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务