Description
把M个同样的鸡蛋放在N个同样的篮子里,允许有的篮子空着不放,问共有多少种不同的放法?(用K表示)5,1,1和1,5,1是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1 7 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; }