Skip to content

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