E20742: 泰波拿契數
http://cs101.openjudge.cn/practice/20742/
思路:当 n = 0、1、2 时,直接返回对应的初始值。 从 T3 开始,每一项等于前三项之和。可以用三个变量循环更新,节省空间。
cpp
#include <iostream>
using namespace std;
int tribonacci(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
int t0 = 0, t1 = 1, t2 = 1, t3;
for (int i = 3; i <= n; ++i) {
t3 = t0 + t1 + t2;
t0 = t1;
t1 = t2;
t2 = t3;
}
return t2;
}
int main() {
int n;
cin >> n;
cout << tribonacci(n) << endl;
return 0;
}cpp
#include <array>
#include <iostream>
auto main() -> int {
int n;
std::array<int, 31> T = {0, 1, 1};
std::cin >> n;
if (n >= 1 && n <= 2) {
std::cout << T[n] << "\n";
return 0;
}
for (int i = 3; i <= n; i++) {
T[i] = T[i - 1] + T[i - 2] + T[i - 3];
}
std::cout << T[n] << "\n";
return 0;
}共用时5min