问题描述:样例输入:
1
73
样例输出:
8
解题思路: 看代码的注释。
代码:
#include<iostream>
// m为苹果的数量 n为盘子的数量。
int f(int m, int n)
{
if (n > m) //盘子的数量大于苹果的数量
return f(m, m); //返回一个盘子放一个苹果
if (m == 0) //苹果的数量为零时,返回1,只有一种分发,全为空盘子。
return 1;
if (n == 0) //盘子的数量为零时,返回0,不能分。
return 0;
return f(m, n - 1) + f(m - n, n);
//分俩种方案 第一种是有空盘子没有放苹果的。第二种是没有空盘子,每个盘子都至少放一个苹果。
}
using namespace std;
int main()
{
int t, m, n;
cout << "请输入测试数据的组数:" ;
cin >> t;
while (t--)
{
int ch;
cout << "请输入苹果的数量和盘子的数量:";
cin >> m >> n;
ch = f(m, n);
cout << "一共有" << ch << "种分法" << endl;
}
return 0;
}