超級樓梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 48297 Accepted Submission(s): 24705
Problem Description
有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?
Input
輸入數據首先包含一個整數N,表示測試實例的個數,然后是N行數據,每行包含一個整數M(1<=M<=40),表示樓梯的級數。
Output
對於每個測試實例,請輸出不同走法的數量
Sample Input
2 2 3
Sample Output
1 2
Author
lcy
Source
Recommend
本題用遞推就可以,這是一個斐波那契數列,數列的第n項f(n)=f(n-1)+f(n-2),已知f(1)和f(2),由此可以依次推出f(3)....f(n)。
本題規定1<=M<=40,那么可以先將所有項推出並保存到一個數組當中,數組的下標表示第i層樓梯,其對應的數值為第i層樓梯有多少種走法。
將數列保存到數組中后,輸入第M層樓梯,從數組中輸出對應下標的值即可。
AC代碼:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a[45],i,n; 7 a[1]=0; 8 a[2]=1; 9 a[3]=2; 10 for(i=4;i<45;i++) 11 a[i]=a[i-1]+a[i-2]; 12 while(cin>>n) 13 { 14 while(n--) 15 { 16 cin>>i; 17 cout<<a[i]<<endl; 18 } 19 } 20 return 0; 21 }