把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。
【输出】
对输入的每组数据M和N,用一行输出相应的K。
1
7 3
8
1 #include <iostream> 2 using namespace std; 3 int sf(int m, int n); 4 int main() { 5 int t, M, N, K; 6 cin >> t; 7 for (int i = 1; i <= t; i++) 8 { 9 cin >> M >> N; 10 K = sf(M, N); 11 cout << K << endl; 12 } 13 } 14 int sf(int m,int n) { 15 if (n == 1 || m == 0) { //这个一定要到底层,不然会死循环比如m==1; 16 return 1; 17 } 18 19 if (m < n){ 20 return sf(m, m); 21 }else if (m >= n) { 22 return sf(m - n, n) + sf(m, n - 1); 23 } 24 }
不要说了,扎心,又又又一道题目一点思路都没有,看过分析才会做,太失败了,注意不能死命纠结于题目算出来的数字,要通过本质去分析。
分析:https://blog.csdn.net/BeforeEasy/article/details/80149996 另外插一句啊,我的博客的链接都是在我写代码中对我有帮助的(别人的写的博客),以后再来复习的时候会方便一点,如果这犯啥规了,私聊我我把它删了(应该是隐藏了,不然白汇总了,/(ㄒoㄒ)/~~)。
原文:https://www.cnblogs.com/zymzymzym/p/13175651.html