题解 | #放苹果#

放苹果

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

#include <iostream>
using namespace std;
int count(int n, int m, int up){ //在n个盘子里放m个苹果
    if(n == 0 || m == 0) return 1; //如果没苹果或者没盘子都是返回一个成功的放置
    int ans = 0;
    int po = m % n ? m / n + 1: m / n; // 这里是为了判断是否相等,如果能整除的话
    int start = up > m ? m : up;//i的起点不能比上一个更高
    for(int i = start; i >= po; --i){ //现在的盘子放i个苹果,剩下的盘子交给其余的n-1个盘子放
        ans += count(n - 1, m - i, i); // 剩余了m-i个苹果以及n-1个盘子
    }
    // cout << m <<" "<< n <<" "<< ans << endl;
    return ans;
}
int main() {
    int m, n;
    cin >> m >> n;
    cout << count(n, m, m) << endl;

}
// 64 位输出请用 printf("%lld")

代码不是很简洁,主要思想就是后边盘子里的苹果不能大于前边盘子放到苹果,比如7个苹果放到三个盘子里就是如下几种;

(7,0,0) (6,1,0) (5,2,0) (5,1,1) (4,3,0) (4,2,1) (3,3,1) (3,2,2)

全部评论

相关推荐

03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务