2880 - 【创新型23361】第7章:函数 第39级台阶
小明刚刚看完电影《第<span>39</span><span>级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是</span><span>39</span><span>级</span><span>! </span><span>站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上</span><span>1</span><span>个或</span><span>2</span><span>个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完</span><span>39</span><span>级台阶,有多少种不同的上法呢?从键盘输入给定一个</span><span>n</span><span>(</span><span>n<=39</span><span>),表示几阶台阶,编程计算并输出种类的数目。</span>
<br />
Input
1个数n(n<=39),表示几阶台阶。
Output
51167078
Examples
Input
39
Output
51167078
Solution C
#include<stdio.h> #include<math.h> long stap(long a) { if(a==1) return 0; if(a==2) return 1; if(a==3) return 2; if(a==4) return 2; if(a>4) return stap(a-2)+2*stap(a-3)+stap(a-4); } main() { long a,l; scanf("%d",&a); l=stap(a); printf("%d",l); }
Solution C++
#include<iostream> //有左右脚的限制。 using namespace std; const int N=39; int f(int x,int y) { if(x==0||y==0) return 1; return(f(x-1,y)+f(x,y-1));//递归的关键在此,大规模逐渐转化为小规模。 } int main() { int x,y,n,sum=0;//x表示走两步的次数,y表示走一步的次数。 int i,sum=0; cin>>n; x=n/2; for(int i=x;x>=0;x-=2) //为了保持偶数步,必须x每次递减2,而不是1;(x要x>=0,不能x>0),x=0是针对偶数台阶。 { y=n-2*x; sum+=f(x,y); //求组合数; } cout<<sum<<endl; return 0; }