CCF NOI1072.爬樓梯【遞推】【打表】
阿新 • • 發佈:2018-12-13
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
樹老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數。例如: 樓梯一共有3級,他可以每次都走一級,或者第一次走一級,第二次走兩級,也可以第一次走兩級,第二次走一級,一共3種方法。
輸入
輸入包含若干行,每行包含一個正整數N(1<=N<=30),代表樓梯級數。
輸出
不同的走法數,每一行輸入對應一行輸出。
樣例輸入
5 8 10
樣例輸出
8 34 89
資料範圍限制
1<=N<=30
題記:
這道題可以這樣想:n個臺階,可以在n-2個臺階的時候走一次兩級到達,也可以在n-1個臺階的時候走一級到達。遞推關係明顯,所以得到走法的關係式:f(n)=f(n-2)+f(n-1),n>3。
提前打個表免得每次都要從頭開始推,節省時間。
C++程式如下:
#include <iostream> using namespace std; #define N 30 typedef unsigned long long ULL; ULL stairs[N+1]; void setstairs(int n) { ULL s1=1, s2=2, temp; stairs[0] = 0; stairs[1] = 1; stairs[2] = 2; for(int i=3; i<=n; i++) { temp = s1 + s2; s1 = s2; s2 = temp; stairs[i] = s2; } } int main(void) { int n; setstairs(N); while(cin >> n) cout << stairs[n] << endl; return 0; }