题目描述
把m 个同样的苹果放在n 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。(5,1,1 和 1,1,5 是同一种方法)
输入格式
第一行是测试数据的数目
t,以下每行均包括二个整数 m 和 n,以空格分开。
输出格式
对输入的每组数据 m 和 n,用一行输出相应的结果。
输入输出样例
输入 #1复制
1
7 3
输出 #1复制
8
输入 #2复制
3
3 2
4 3
2 7
输出 #2复制
2
4
2
代码
#include<cstdio>
#include<iostream>
using namespace std;
//m表示苹果总数量,n表示盘子总数量
int s1(int m,int n)
{
if(n<=1||m<=1)
{
return 1;
}
//如果盘子比苹果多,则去掉多余的盘子
if(n>m)
{
return s1(m,m);
}
//如果苹果比盘子多,则可以分为两种情况
//1.所有盘子已经放了一个,其余苹果随机排列
//2.去掉其中一个盘子,直至盘子数清空
else
{
return s1(m-n,n)+s1(m,n-1);
}
return 0;
}
int main()
{
int m,n;
int x;
cin>>x;
for(int i=0;i<x;i++)
{
cin>>m>>n;
int s=s1(m,n);
cout<<s<<endl;
}
return 0;
}