#include <iostream> using namespace std; /* m 个苹果 n 个盘子 */ int ways(int m, int n) { if (m == 0) { //苹果没了,这是一种方法 return 1; } if (n == 0) { //苹果还有,但是没盘子了,这种不行 return 0; } if (m < n) { //苹果的数量 < 盘子数量 那么拿掉几个盘子不影响结果 return ways(m, m); } if (m >= n) { //苹果的数量 >= 盘子数量 return ways(m - n, n) + ways(m, n - 1); } return 0; } int main() { int m, n; //m个苹果, n个盘子 while (cin >> m >> n) { // 注意 while 处理多个 case int t = ways(m, n); printf("%d\n", t); } } // 64 位输出请用 printf("%lld")