一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法?
举个例子,假设有3个台阶,则有三种走法:分别是,1-1-1, 1-2, 2-1。
分析
很简单的一道题,学过组合数学的人很快就能想到,这是一个递推关系。假设走完k个台阶有f(k)种走法。
- k = 1时,f(k) = 1
- k = 2时,f(k) = 2
- k = n时,第一步走一个台阶,剩n-1个台阶,有f(n - 1)种走法。第一步走两个台阶,剩n-2个台阶,有f(n - 2)种走法。所以共有f(n - 1) + f(n - 2)种走法。
于是有如下公式
代码
int count(unsigned int n)
{
if(n == 1)
return 1 ;
if(n == 2)
return 2 ;
else
return count(n - 1) + count(n - 2) ;
}
具体是怎么走的呢?
上面只给出了有多少种走法,那么具体每一种走法是怎么走的呢?比如n=4时,五种走法分别如下:
1,1,1,1
1,1,2
1,2,1
2,1,1
2,2
我们用一个整型数组来存放每一步的内容,1表示这步走了一个台阶,2表示这步走了两个台阶。回溯法搞定。代码如下。
void count(int n, int t)
{
if(n < 0)
return ;
if (n == 0)
Output(step, t) ;
else
{
for (int i = 1; i <= 2; ++i)
{
step[t] = i ;
count(n - i, t + 1) ;
}
}
}
类似的问题
与此题类似的问题有很多,比如铺地砖问题,自然数拆分等。
铺地砖问题
有一个长度为n,宽度为2的地面,有若干块长为2,宽为1的地砖,请问用此地砖铺完这个地面共有多少种方法?
分析一下,假设铺完长度为n的地面有f(n)种方法,如果第一块地砖竖起来铺,还剩下长度为n-1的地面,有f(n-1)种方法。如下图。
如果第一块地转横着铺,那么还剩下长度为n-2的地面,有f(n-2)种铺法。如下图。
所以这道题与上面的题解法完全一样。不同的题目,相同的模型而已。
自然数拆分
给定一个自然数n,将其拆分为若干个自然数字之和,请问有多少种方法?举个例子,n=4时,可以拆分为1-1-1-1,1-1-2,1-3,2-2。
这题和上面的题很像,不过上面的问题是排列问题,而这题是组合问题,比如n=4时,1-1-2,1-2-1,2-1-1这三种只能算一个拆分。在上面的基础上,去掉重复的组合即可。
分享到:
相关推荐
【走台阶演示工具】是一款专为帮助用户提升想象力和理解走台阶过程而设计的应用程序。在现实生活中,走台阶是一项常见的活动,但对于某些人来说,理解这个动作的顺序和细节可能会有困难,尤其是在进行体育训练、康复...
宏丽丽回家需要走的台阶数等于楼层间的间隔数乘以楼层数减去1(因为不包含起点)。所以,宏丽丽需要走的台阶数为 (4-1) * 18 = 54级。 2. **锯木头问题**:假设将木头锯成2段需要4分钟,那么每增加一段就需要额外锯...
例如,10 级台阶用 8 步走完,可以看成是每步走 1, 2 或 3 级的组合。 练习解答: - 对于甲、乙两队的围棋擂台赛,可以看成是树形结构问题,每一场比赛对应树的一层,最终胜利者有多种路径,计算所有可能的树结构...
如10级台阶用8步走完,可以构建每步走1、2或3级的模型,利用动态规划或者递推关系解决。这个问题可以用阶乘和二项式系数组合得出答案。 练习: 比赛过程问题可以转化为树形结构,甲乙两队的每个队员都可以看作是...
首先,课件通过一个生活情境引入问题:小明从一楼到三楼需要走两层楼梯,每层有16个台阶,所以总台阶数为 \(16 \times 2 = 32\) 个。这个例子帮助学生理解基本的乘法运算。 接着,我们进入了探究环节。探究一讨论的...
13. **链表中倒数第k个节点**:双指针法是解决此类问题的常用手段,其中一个指针先走k步,然后两个指针同时移动。 14. **反转链表**:链表的翻转操作,可以使用迭代或递归方法实现。 15. **合并两个排序的链表**:...
例1.1.1中,阿呆每秒走3级台阶,扶梯每秒上移1级,扶梯可见部分共100级。阿呆从上至下行走,扶梯移动了50级。 例1.1.2中,甲乙两人分别从扶梯顶部和底部行走,通过他们的速度比和行走的台阶数,我们可以推算出扶梯...
同样以台阶问题为例,倒推是先考虑已经到达n-1阶或n-2阶的情况,然后分别加上一步或两步到达n阶,得出f(n)=f(n-1)+f(n-2)。 二、递推算法实例 这里给出了几种不同的递推算法实现方式: 1. 第一种递推实现通过循环...
走台阶问题 计算回文字符串 字符串反转 字符串模式匹配 字符串前缀匹配 字典trie匹配 最大连续字符串 字符串压缩 最短路径和 路径总数 最长等差数列 组合硬币数量 最少完全平方数 组合总和 梯度下降算法演示 ...
训练题目中,通过类似的计算可以确定不同楼层居民上楼所需跨越的台阶数。 总结来说,这些问题是通过找出基本关系,即段数或次数与最终结果之间的差值,然后利用这个关系来解决实际问题。这种思维方式在解决实际生活...
素质练习如低台阶交换跳、走跑交替等,旨在提高孩子们的心肺耐力和腿部力量。而跳小绳、走圆形、走各种姿势的走等,有助于发展孩子们的灵活性和步态控制。 最后,考核项目如坐位体前屈,可以评估孩子们的柔韧性和...
3. 对于翟志刚舱外活动的描述,"走得最快"是以飞船为参考系,因相对于飞船他的速度是最快的;"25 min 23 s"表示的是时间间隔,而不是时刻。 4. 苹果下落问题运用自由落体公式,可以通过速度计算下落高度,选择项B给...
4. **阶跃数**:爱因斯坦走台阶问题是一个典型的同余方程问题,可以通过模运算寻找规律。 5. **弦数**:弦数是指满足a^2 + b^2 = c^2的正整数,可以用暴力搜索法求解。 6. **条件筛选**:例如找特定条件下的数,如...
本文旨在介绍基于单片机的步进电机加减速的控制方法,该方法可以解决步进电机快速加减速控制中常见的失步堵转噪声等问题。步进电机具有快速停能力强、粕度高、专速容易控制的特点,在工业过程控制及仪等领域中越来越...
以锉刀手柄加工为例,整个工艺流程包括车外圆、车台阶、车圆弧以及整形,每一步都需要精确的尺寸控制和细致的操作。 车工实习不仅提升了学生的专业技能,也锻炼了他们的耐心和专注力。在实习过程中,学生们逐渐理解...
2、第二题涉及到的是简单的乘法运算,小敏从底楼到六楼,要走5层楼,每层12级台阶,总共走5*12级台阶。 3、第三题考察年龄差的理解,10年后哥哥比弟弟大的岁数就是现在哥哥比弟弟大的岁数,即15-8。 4、第四题是一...
本问题要求计算从顶部到底部的不同走法数量,每次可以跳1、2或3个台阶。 **代码解析:** ```c #include #define N 5 // 台阶数 void Try(int n, int stack[], int *pp, int *psum) { int i; for (i = 1; i ; i++...
- 通过楼梯问题(14级台阶走两层)训练学生的实际应用能力。 - 正方体木块的六个面的探索,培养学生的空间思维。 这些题目全面覆盖了一年级学生应掌握的基础数学知识,包括数的概念、运算规则、几何形状认知以及...
5. 上楼问题:老师走了72个台阶,每层24个,说明老师去了3层楼,选B。 四、解决问题: 1. 圆形水池摆盆景:100m的周长除以5m的间隔,得到20盆。 2. 四边形围圈游戏:学生总数减去4(角上的学生),再除以4(每边)...