递归算法入门题,不过如果数字再大一点可能要考虑记忆化搜索了。
/**************************************************
**文件名:百炼-1664
**Copyright (c) 2015-2025 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170806
**描述:百炼-1664参考答案
**版本:1.0
***************************************************/
#include <stdio.h>
/**************************************************
对于将m个苹果放入n个盘子
1,如果n>m那么必然有至少n-m个盘子是空的,分法数等于将m个苹果放入m个盘子时的情况
2,对于n<=m的情况,有两种分发:有盘子空着,没有盘子空着
f(m,n)=f(m-n,n)+f(m,n-1)
***************************************************/
/**************************************************
**函数名:slove
**输入:m-苹果数,n-盘子数
**输出:对应情况的分法数
**功能:计算对应情况的分法数
**作者:OrdinaryCrazy
**日期:20170806
**版本:1.0
***************************************************/
int solve(int m,int n)
{
if(m == 0 || n == 1)
return 1;
if(n > m)
return solve(m,m);
return solve(m - n,n) + solve(m,n - 1);
}
int main()
{
int t,m,n;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
printf("%d\n",solve(m,n));
}
return 0;
}