问题:每次跳1、2、3、4......m次楼梯,有n阶楼梯,输入n,n >= m,请问刚好跳完楼梯有多少种跳法?
思路一:用排列组合的方法
#include<iostream>
using namespace std;
int main() {
// 以m = 4为例
int n;
cin >> n;
int count = 0;
int max_number_of_4 = n / 4;
int number_of_4 = max_number_of_4;
while (number_of_4) {
int max_number_of_3 = (n - 4 * number_of_4) / 3;
int number_of_3 = max_number_of_3;
while (max_number_of_3) {
int max_number_of_2 = (n - 4 * number_of_4 - 3 * number_of_3) / 2;
int number_of_2 = max_number_of_2;
while (number_of_2) {
int number_of_1 = n - 4 * number_of_4 - 3 * number_of_3 - 2 * number_of_2;
//count += (x + y + z + w)! / (x! * y! * z! * w!) x,y,z,w是4,3,2,1的个数
//这里就自己写吧
number_of_2--;
}
number_of_3--;
}
number_of_4 --;
}
}
思路二:用递归的方法
int function(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
if (n == 3) {
return 3;
}
if (n > 3) {
return function(n - 1) + function(n - 2) + function(n - 3);
}
}
int main() {
int n;
while(cin >> n)
cout << function(n) << endl;
}