N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式?
思路一:设有x次走一阶,y次走两阶,则一定满足x+2*y=n,且x、y均为整数,那么对于任何一个满足的x的可能走法共有
C(x+(n-x)/2,x)种走法,即从数x+(n-x)/2中取x种组合,值为(x+(n-x)/2)的阶乘除以x的阶乘与(n-x)/2的阶乘的乘积。
依次取可能的x值,然后相加每一种的可能情况就可以了。代码如下
/*
* N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式
*/
public class ListCraw {
public static void main(String args[]){
System.out.println(crawlist(30));
}
public static int crawlist(int n){
if(n<=0){
return -1;
}
int total=0;
for(int x=0;x<=n;x++){
if((n-x)%2==0){
if(x==0||n-x==0){
total++;
}else{
int re=f(n+(x-n)/2)/(f(x)*f((n-x)/2));//计算组合数C(x+(n-x)/2,x)
total+=re;
}
}
}
return total;
}
public static int f(int n){//求n的阶乘,返回-1,说明输入数据n不合法
if(n==0){
return 1;
}else if(n>=1){
return n*f(n-1);
}else{
return -1;
}
}
}
思路二:走到第n阶时可能是从第n-1阶走一步到的,也可能是从n-2阶走两阶到的,设F(n)为走到n阶的种数,则F(n)=F(n-1)+F(n-2)。当n=1时,F(1)=1,n=2时,F(2)=2,这是一个动态规划问题。其实就是一个斐波那契数列。
public static int fic(int n){
if(n==1||n==2){
return n;
}else if(n>=3){
return fic(n-1)+fic(n-2);
}else{
return -1;//输入n值非法
}
}
分享到:
相关推荐
标题中的“n阶楼梯上楼方法种数”是一个经典的数学问题,通常被称为“斐波那契阶梯问题”或“兔子序列”在不同上下文中的一种变体。这个问题涉及到组合数学和递推关系,对于理解数学思维和算法设计具有重要意义。 ...
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法? 【参考解答(递归法)】 基础:楼梯有一个台阶,只有一种走法(一步登上去);两个台阶,有2种走法(一步上去,或分两次...
本文实例讲述了Python走楼梯问题解决方法。...分析:问题可以从最后一次是走1步还是两步,反向考虑 ''' def take_stairs_recursive(n): if n == 1: return 1 elif n == 2: return 2 else: return take_stairs_recur
- 问题描述:有N阶楼梯,上楼时可以一步上一阶或两阶。问有多少种不同的上楼方法。 - 解决思路:这是一个典型的动态规划问题,也可以使用递归解决。递归的基本思想是将复杂问题分解成更简单的子问题。在这个问题中...
2. 如果楼梯有两阶,那么有两种走法:每次走一级,或者一次性走两级。 3. 对于更高阶数的楼梯,到达第n阶楼梯的方法数等于到达第n-1阶的方法数(先走一级)和到达第n-2阶的方法数(先走两级)之和。 递归函数`...
标题中的“n步走楼梯.rar”暗示我们正在讨论一个经典的计算机科学问题,通常称为“楼梯问题”或“N阶楼梯问题”。在这个问题中,一个人站在一个有N个台阶的楼梯底部,每次可以跨1到3个台阶到达上面的台阶。目标是找...
好用的取色器,按住ALT 用鼠标取色 方便实用!
4. 台阶问题:上楼可以一步一阶或一步两阶,递归地表示第n阶楼梯的走法是第n-1阶楼梯走法加上第n-2阶楼梯的走法。 5. 信封问题:考虑n封信装入n个信封,每封信都装错了信封。递归地,可以表示n封信的错误排列为n-1...
有n级台阶,一个人每次上一级或者两级,问有多少种走完N级台阶的方法。为了防止溢出,请将结果Mod 1000000007。 给定一个正整数int N,请返回一个数,代表上楼的方式数。保证N小于等于100000。 这道题类似于...
走楼梯时,幼儿可能会遇到的安全问题主要有以下几点: 1. 摔倒:由于幼儿步态尚不稳定,加上楼梯台阶高度和宽度对他们来说可能较难适应,容易导致摔倒。 2. 拥挤:在集体活动时,如果孩子们没有形成排队的习惯,可能...
上楼梯问题是一种典型的数学思维训练题目,它旨在培养学生的逻辑思维和解决问题的能力。此类问题的核心在于理解“上楼梯”的本质:每次上楼实际上是在跨越楼梯层数,而不是计数地板。例如,从一层上到四层,虽然经过...
以“上楼梯”问题为例,假设有N阶台阶,每次可以上1阶或2阶,任务是计算有多少种不同的上楼方式。Pascal程序如下: ```pascal program stair(input, output); var s, n: integer; function f(n: integer): integer...
后者则展示了求解不同步长爬楼梯的方式总数,提供了两种解决问题的方式——简单的递归函数与采用动态规划的优化方案。同时,对于算法进行了深入解释以便学习其基本逻辑和具体应用。 适用人群:具备初级到中级Python...
7. 例6晶晶上楼问题,从1楼到3楼有2层楼梯,每层18级,到6楼共5层,所以需要走90级台阶。 8. 习题解析: - 习题1:截7段需要截6次,6分钟截3次,每次2分钟,所以6次共12分钟。 - 习题2:从1层到11层共10层楼梯,...
13. 杨树种植问题:72米两楼间种8棵不两端,每两棵间6米。 14. 同问题13,答案相同。 15. 插彩旗问题:周长500米,每隔5米红旗,每两红旗间黄旗,共100面红旗,100面黄旗。 16. 爬楼梯问题:从三楼到十楼,需要9分钟...
对于1阶有1种,2阶有2种,3阶有4种,4阶有7种。递归公式为:`g(n) = g(n-1) + g(n-2) + g(n-3) + g(n-4)`,用于计算15阶楼梯的方法数`g(15)`。 3. **青蛙跳台阶问题**: - 青蛙每次可以跳1或2个台阶。到达`n`层...
- **问题描述**:一个人上楼梯,每次可以跨1阶或2阶,求有多少种上楼的方法。 - **解题思路**:这是一个典型的递归问题,也可以通过动态规划解决。设f(n)表示到达第n阶楼梯的方法数,那么f(n) = f(n-1) + f(n-2)。 -...
1. 锯钢管问题:这是关于等差数列的问题,通过计算锯一次所需时间来解决。 2. 锯水管问题:考察的是乘法和加法的应用,理解每锯一次所需时间并乘以锯的次数。 3. 时钟敲钟问题:基于等比数列的概念,敲钟次数和时间...
这篇资料主要讲解的是沪教版三年级上册数学中的植树问题,包括了三个主要的探究环节,分别是两端都种树、一端种一端不种、两端都不种的情况,以及涉及到了实际生活中的数学应用,如上楼问题和绳子切割问题。...