【C语言】20个阶梯,一次只能走1或2阶,有多少种走法
【C语言】20个阶梯,一次只能走1或2阶,有多少种走法。
/* 有20阶阶梯,一次只能上1或2阶阶梯,问有多少种走法的求解 *//*
分析:一阶阶梯的时候只有一种走法,两阶阶梯的时候有两种走法,三阶的时候,假设第一下跨了两阶,那还剩一阶阶梯,走法数与只有一阶的时候相同;假设第一下跨了一阶,还剩两阶,走法数与有两阶的时候相同;那三阶的时候就是两阶的走法数加上一阶时的走法数。以此类推。PS:实际上分析过来就是斐波那契数列。代码实现:可以有递归与动态规划两种方法。------------更新-----------22.12.2019----------也可以使用迭代。x = 1;y = 1;for(.......){x = x + y;y = x + y;}递归:设n阶时走法数为f(n),则f(n) = f(n-1) + f(n-2)伪代码:int f(int n){if(1 == n) return 1;if(2 == n) return 2;return f(n - 1) + f(n - 2);}动态规划:设n阶时走法为seq[n - 1],则seq[0] = 1;seq[1] = 2;seq[n] = seq[n - 1] + seq[n - 2];
*/#include <stdio.h>
#include <stdlib.h>/* 动态规划实现 */
int dpSeq(int n){int *seq = (int*)malloc(sizeof(int) * n);seq[0] = 1;seq[1] = 2;for (int i = 2; i < n; ++i)seq[i] = seq[i - 1] + seq[i - 2];int mid = seq[n - 1];free(seq);return mid;
}/* 递归实现 */
int stackSeq(int n){if(1 == n) return 1;if(2 == n) return 2;return stackSeq(n - 1) + stackSeq(n - 2);
}int main(int argc, char const *argv[])
{printf("Stack: %d\n", stackSeq(20));printf("DP : %d\n", dpSeq(20));return 0;
}
【C语言】20个阶梯,一次只能走1或2阶,有多少种走法相关推荐
- 请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走。
请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走. 递归实现: # ...
- C语言题目地图上有m个城市,序号依次为1,2,3....m,刚开始你在1,若每次只能从当前城市去往当前序号加1或者加3的城市,要到达m城市(m3),有多少种走法
地图上有m个城市,序号依次为1,2,3....m,刚开始你在1,若每次只能从当前城市去往当前序号加1或者加3的城市,要到达m城市(m>3),有多少种走法 要想到达m,则前一个应该是m - 1或者 ...
- n级阶梯,每次走一步或两步,问最多有多少种走法
遇到这道题两次了,现在来总结下. 方法一:运用组合数学的思想.假设在整个过程中,我有k次走了两步,那么剩下的n-2k次我走的都是一步,那么我总的走的步数是k+n-2k.则结果为从n-k里面选了k次走两 ...
- 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。...
[分析]这是一典型的排列组合问题, 但若用排列组合来分析则演变为纯数学问题,则无法用递归的方法来解决.能使用递归的方法的模型的规律是问题的解决方法与问题的规模无关,因此可以先从数字的规律入手: 假设共 ...
- 10个台阶,每次只能上1个或者2个,一共有多少种走法
思路来得太慢,好想拿小锤锤捶自己哟~~~ 第一种,递归思路. 如果你上10个台阶,可以分解成下面两种情况: ● 上9个台阶,最后上1个台阶.假设这种情况下,上前面9个台阶的方法数为m. ● 上8个台阶 ...
- 详细解答【算法题】9个台阶,每次只能上1个或者2个,一共有多少种走法?
前言 看到这道题感觉还挺有意思的,自己第一时间并没有想出来,是看了类似博文后才豁然开朗,但是我看到的博文中都没有将下面这个数列的来龙去脉说明清楚, f ( n ) = f ( n − 1 ) + f ...
- 蹬N级阶梯有几种走法
今天蹲大的时候,想着这道题,逆向想通了,记下来. 题目: 有N级阶梯,往上走的时候,有两种走法:走1级或走2级.问,蹬上N级阶梯,总共有多少总解法. 正向想很容易陷进去前面走的是否有重复.交叉一类的思 ...
- 马走日问题,在5*5的棋盘中,马只能走日字。马从位置(0,0)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。(C语言实现)
#include <stdio.h> #include <windows.h> #include <math.h>#pragma warning(disable:4 ...
- n级阶梯,人一步只能上1~2级,求一共有几种走法?
B站上有这样一道题: 大厂算法很难!力扣经典算法解析,小白也能懂!_哔哩哔哩_bilibili数据结构和算法可以让程序员脱胎换骨,刷算法题可以帮助我们通过面试和笔试,找到梦寐以求的工作,进入一线大厂或 ...
最新文章
- linux开发log示例,RH124-log Linux日志(示例代码)
- 编写工厂类和配置文件
- clover写入efi_2014 黑苹果折腾之clover efi全新安装
- 游戏引擎cocos2d-android使用大全
- mysql json 创建索引_MySQL · 最佳实践 · 如何索引JSON字段
- jvm类加载机制是怎么样的
- linux操作常用命令
- 追根溯源:EntityFramework 实体的状态变化
- ghost不要用作域控的备份
- python的ctype调用_Python 使用ctypes调用 C 函数
- 进程间通信之CreatePipe
- 数据库名、实例名、数据库域名、全局数据库名、服务名 ,
- 关于《淘宝技术这十年》
- crosses initialization of “XXX”
- 神经网络与误差反向传播算法
- 2023年天津农学院专升本停招专业的备考建议?
- eTS UI开发学习
- python3 get爬取网页标题、链接和链接的数字ID
- 分治法查找数组元素的最大值和最小值(python实现)
- 谷歌chrome浏览器设置成深色(护眼)模式