算法题每日一练---第11天:第39级台阶

简介: 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

一、问题描述


小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

站在台阶前,他突然又想着一个问题:

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,那么总共有多少种不同的上法呢?

面对庞大的计算量人力计算肯定不行,请你利用计算机的优势,帮助小明寻找这个答案。


二、题目要求


考察

递归性、规律性
建议用时10~25min



三、问题分析


题目告诉我们的已知信息是总共有39个台阶,每一次只能跨越一个或者两个,而且要求跨越的总步数必须是偶数。

假如将上述题目中的步数要求为偶数给去掉,那么通过普通的斐波那契数列就可以解决这个问题。

if(n==1) return1;//只有一级台阶,输出1步if(n==2) return2;//两级台阶,可以先走一步再走一步,或者直接走两步,所以两种elsereturnfac(n-1)+fac(n-2);//总的规律性

加上这一个条件,我们也只需要加上一个步数判断就行了。走一步跨越1个台阶,调用函数,步数加一。走一步跨越2个台阶,调用函数,步数加一。假如台阶数已经走完了,只需要判断步数是否为偶数。

判断条件为:if(n==0&&step%2==0)


四、编码实现


#include <iostream>usingnamespacestd;
intsum=0;//定义全局变量sum voidfac(intn,intstep)//函数 {
if(n<0) 
return;
if(n==0&&step%2==0)//如果台阶数为0,步数是偶数 sum++;//sum加加 fac(n-1,step+1);//台阶数减一,步数加一 fac(n-2,step+1);//台阶数减二,步数加一 }
intmain()
{
inti,j,n=39;//初始化 fac(n,0);//调用函数 cout<<sum;//输出结果 return0;
}


五、输出结果


输出结果为:51167078


相关文章
|
算法
斐波那契数列两种算法和青蛙跳台阶的两种实际问题
当我们看到这样的题时,心想就是一个简单的递归调用么。 但是,我们要看到这种算法的不足之处——效率低下。 首先简单的介绍一下 :
82 0
|
算法 JavaScript
js 实现 贪心算法和动态规划 贪心找零问题, 动态规划 青蛙跳台阶问题
js 实现 贪心算法和动态规划 贪心找零问题, 动态规划 青蛙跳台阶问题
|
算法
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
83 0
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
|
算法
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
128 0
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
|
算法
算法题每日一练---第78天:二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target
171 1
算法题每日一练---第78天:二分查找
|
存储 算法
|
算法
算法题每日一练---第76天:丑数 l
丑数 就是只包含质因数 2、3 和 5 的正整数。
140 1
算法题每日一练---第76天:丑数 l
|
算法
算法题每日一练---第75天:Nim 游戏
你和你的朋友,两个人一起玩 Nim 游戏。
312 0
算法题每日一练---第75天:Nim 游戏
|
算法
算法题每日一练---第74天:快乐数
编写一个算法来判断一个数 n 是不是快乐数。
173 0
算法题每日一练---第74天:快乐数
|
存储 算法
算法题每日一练---第73天:加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
142 0
算法题每日一练---第73天:加一