问题描述
小蒜想知道把 MM 个同样的苹果放在 NN 个同样的盘子里,允许有的盘子空着不放,共有多少种不同的分法?(用 KK 表示)55,11,11 和 11,55,11 是同一种分法。
输入
第一行是测试数据的数目 t(0 \le t \le 20)t(0≤t≤20)。
以下每行均包含两个整数 MM 和 NN,以空格分开。1 \le M, N \le 101≤M,N≤10。
输出
对输入的每组数据 MM 和 NN,用一行输出相应的 KK。
Sample 1
Inputcopy Outputcopy 1 7 3 8
解题思路 :递归 m是苹果,n是盘子
(1)m==0||m==1||n==1
苹果没有或者苹果只有一个时或者盘子只有一个时,只有一种放法;
后面的需要依次递归,直到满足该出口条件时递归回来;
(2)当苹果数小于盘子数
apple(m,m),m个苹果放m个盘子;
(3)当苹果数大于盘子数
所有盘子都放一个苹果 apple(m-n,n)
只有一个盘子不放 apple(m,n-1);
代码如下
#include<stdio.h>
int apple (int m,int n)
{
if(m==0||m==1||n==1)
return 1;
if(m<n)
return apple(m,m);
else
return apple(m-n,n)+apple(m,n-1);
}
int main(void)
{
int n,m,t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d%d",&m,&n);
printf("%d\n",apple(m,n));
}
return 0;
}