小学奥数:
小明有三种上楼梯的方法:上一阶,上两阶,上三阶。
第n阶可以从n-1,n-2,n-3阶上来
那么上n阶的方法数就是 f(n)=f(n-1)+f(n-2)+f(n-3)
有了思路那么就开始写代码:
对于未学数组的朋友来说,我们可以这样写:
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int a, b, c, d, n;
while (cin >> n) {
a = 1; //第一阶
b = 2; //第二阶
c = 4; //第三阶
if (n == 1) {
cout << 1 << '\n';
continue;
}
if (n == 2) {
cout << 2 << '\n'; //前三阶直接选择语句输出
continue;
}
if (n == 3) {
cout << 4 << '\n';
continue;
} else {
for (int i = 4; i <= n; i++) { //后面的用刚才的公式递推
d = a + b + c;
a = b;
b = c;
c = d;
}
}
cout << c << '\n';
}
return 0;
}
然而当我们学会数组后就简单了:
#include <cstdio>
int main() {
int a[36] = {1, 2, 4}, n; //对前三阶赋值(数组从0开始)
while (cin>>n) {
for (int i = 3; i < n; i++)
a[i] = (a[i - 1] + a[i - 2] + a[i - 3]);
cout<<a[n - 1];
}
return 0;
}
还有就是递归版的:
#include <bits/stdc++.h>
using namespace std;
int s(int n) {
if (n == 1)
return 1;
else if (n == 2)
return 2;
else if (n == 3)
return 4;
else
return s(n - 3) + s(n - 2) + s(n - 1);
}
int main() {
int n;
cin >> n;
cout << s(n);
}
当然这里要注意数据范围!!!增长得很快,n不能过大。
这样就爬完楼梯了,你学会了吗?