#include <iostream> using namespace std; // num[1] = 1; // num[2] = 1; // num[3] = 2; // num[4] = 3; // num[5] = 5; // num[6] = 8; // num[7] = 13; // num[8] = 21; // num[9] = 34; // 动态规划:关键是找到状态转移方程 // 前面[1][2]的初始值状态,从[3]开始就是 // [n-1]的兔子数(长到三个月后每个月生一只的)+[n-2]的兔子数(新长到第三个月的) int main() { int n; while (cin >> n) { int num[100]; num[1] = num[2] = 1; num[3] = 2; for (int i = 4; i <= n; i++) { num[i] = num[i-1] + num[i-2]; } cout << num[n] << endl; } }