2880 - 【创新型23361】第7章:函数 第39级台阶

通过次数

0

提交次数

0

时间限制 : 3 秒 内存限制 : 4 MB


小明刚刚看完电影《第<span>39</span><span>级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是</span><span>39</span><span>级</span><span>!&nbsp;&nbsp;</span><span>站在台阶前,他突然又想着一个问题:&nbsp;如果我每一步只能迈上</span><span>1</span><span>个或</span><span>2</span><span>个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完</span><span>39</span><span>级台阶,有多少种不同的上法呢?从键盘输入给定一个</span><span>n</span><span>(</span><span>n&lt;=39</span><span>),表示几阶台阶,编程计算并输出种类的数目。</span> 

<br />

题目输入

1个数nn<=39),表示几阶台阶。

题目输出

51167078

输入/输出样例

输入格式

39

输出格式

51167078

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);
}

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; 
}