放苹果
【题目描述】
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
【输入】
第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。
【输出】
对输入的每组数据M和N,用一行输出相应的K。
【输入样例】
1 7 3
【输出样例】
8
还是递归;
我们可以把情况分为两种;
1.有空盘子;
2.无空盘子;
有空盘子时,
从一个空盘开始递归,
1-2-3....
无空盘子时,
每个盘子至少一个苹果,
放完一个,
还剩m-n个苹果,
以此类推,
然后把两种情况加起来,
和就是结果。
1 #include<iostream> 2 using namespace std; 3 int t,m,n; 4 int apple(int,int); 5 int main() 6 { 7 cin>>t; 8 for(int i=1;i<=t;i++) 9 { 10 cin>>m>>n; 11 cout<<apple(m,n)<<endl; 12 } 13 return 0; 14 } 15 int apple(int m,int n) 16 { 17 if(m==0||n==1) return 1; 18 if(m<n) return apple(m,m); 19 return apple(m-n,n)+apple(m,n-1); 20 }
每日打卡O(∩_∩)O~
看不见我看不见我看不见我