放鸡蛋问题

来源:互联网 发布:淘宝u站怎么加入 编辑:程序博客网 时间:2024/04/29 22:26
Description

 M个同样的鸡蛋放在N个同样的篮子里,允许有的篮子空着不放,问共有多少种不同的放法?(用K表示)511151是同一种分法。

Input

 第一行是测试数据的数目t0 <= t <= 20)。以下每行均包含二个整数MN,以空格分开。1<=MN<=10

Output

对输入的每组数据MN,用一行输出相应的K 

Sample Input
 Copy sample input to clipboard
17 3
Sample Output
8
解题方法是利用递归,关键点是防止出现重复以及递归结束的条件
#include<iostream>using namespace std;int f(int egg,int bucket,int max){    if(bucket==0){//篮子为0代表结束放鸡蛋        if(egg==0)//鸡蛋恰好全部放完            return 1;        return 0;    }    int anser;    anser=0;    int i;    for(i=max;i>=0;i--)    {        anser+=f(egg-i,bucket-1,i);    }    return anser;}int main(){    int Testnum;    int egg,bucket;    cin>>Testnum;    int ans;    while(Testnum--){        ans=0;    cin>>egg>>bucket;    ans=f(egg,bucket,egg);    cout<<ans<<endl;}    return 0;}                                 


原创粉丝点击