N阶台阶

【华为OD机考真题】- 猴子爬山或上N阶台阶问题(A卷-100分)(Python) 🔔 本文收录于「最新最全华为OD机试真题(Python版)」专栏,带你从零基础轻松通过华为OD机试!我们为你提供了独家最优解题思路、详细的解题步骤、代码解析、复杂度分析以及最优解源码,支持多语言解题,助你顺利应对OD机考,一举成功!强烈推荐大家关注、收藏并订阅,实时更新中,确保你获取最新题库内容,up!up!up!! 🚫 声明:坚决拒绝任何代考/替考行为,违法必究!本题库内容均来自互联网的精心搜集。   💗 订阅福利: 一次订阅,终身免费阅读,随时享受在线答疑,后续题库更新也能随时阅读和使用! 阅读详情
有n级台阶。从地面(第0级)出发,首先连续的上台阶,上到不超过第n级的某一个位置后再连续的下台阶,直到回到地面。若每次上下台阶只允许走1级或2级,请问可能的上下台阶的方案数是多少?
特别地,在0级站着不动也算一种方案。


数据格式:


输入一行包含两个正整数n和m。
输出一个整数,表示n级台阶有多少种合法的走楼梯方案,答案对m取余。


例如:输入:
2 10007
程序应该输出
6


【样例说明1】
共有6种方案(其中+表示上台阶,-表示下台阶):
(1) 原地不动
(2) +1 -1
(3) +2 -2
(4) +2 -1 -1
(5) +1 +1 -2
(6) +1 +1 -1 -1


再例如,输入:
3 14
程序应该输出:
1


【样例说明2】
共有15种方案,对14取余后得1。


【数据规模】
对于30%的数据,n<=10000;
对于100%的数据,n<=10^17,m<=2*10^9。


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


解题思路:  

设f(n)是fibonacii数列{1,1,2,3,5....}的第n项

 则总台阶数F(n)=f(1)^2+f(2)^2+f(3)^2+...+f(n+1)^2
 * f(n)^2 = f(n)(f(n+1)-f(n-1))=f(n)f(n+1)-f(n)f(n-1) 
 * f(n-1)^2 = f(n)f(n-1)-f(n-1)f(n-2)
 * 因此F(n)合并后得
 * F(n)=f(n+2)f(n+1)

由于数据量过大, 求f(n) 可以使用矩阵快速幂的方式求解



import java.math.BigInteger;
import java.util.Scanner;

public class Main2
{
	public static int mod;
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
        BigInteger n = sc.nextBigInteger();
         mod = sc.nextInt();
        BigInteger[][] f = {{BigInteger.ONE,BigInteger.ONE},{BigInteger.ONE,BigInteger.ZERO}};
        
        BigInteger res1[][] = pow1(f, n.add(BigInteger.ONE));
        BigInteger res2[][] = pow1(f, n.add(new BigInteger("2")));
        
        System.out.println(res1[0][1].multiply(res2[0][1]).mod(new BigInteger(mod+"")) );
	}

	private static BigInteger[][] pow1(BigInteger[][] f, BigInteger n)
	{
		n = n.subtract(BigInteger.ONE);
		BigInteger[][] temp = new BigInteger[2][2];
		temp[0][0] = f[0][0];
		temp[0][1] = f[0][1];
		temp[1][0] = f[1][0];
		temp[1][1] = f[1][1];
		
		while(n.compareTo(BigInteger.ZERO) == 1)
		{
			if (n.mod(new BigInteger("2")).compareTo(BigInteger.ONE)==0)
				temp = mul1(temp, f);
			n = n.divide(new BigInteger("2"));
			f = mul1(f, f);
		}
		return temp;
	}
	private static BigInteger[][] mul1(BigInteger[][]f1, BigInteger[][]f2)
	{
		BigInteger[][]f3 = new BigInteger[2][2];
		f3[0][0] = f1[0][0].multiply(f2[0][0]).add(f1[0][1].multiply(f2[1][0])).mod(new BigInteger(mod+""));
	    f3[0][1] = f1[0][0].multiply(f2[0][1]).add(f1[0][1].multiply(f2[1][1])).mod(new BigInteger(mod+""));
	    f3[1][0] = f1[1][0].multiply(f2[0][0]).add(f1[1][1].multiply(f2[1][0])).mod(new BigInteger(mod+""));
	    f3[1][1] = f1[1][0].multiply(f2[0][1]).add(f1[1][1].multiply(f2[1][1])).mod(new BigInteger(mod+""));
	    
	    return f3;
	}
}


【华为OD机考真题】- 猴子爬山或上N阶台阶问题(B卷-100分)(Golang版) 🔔本文收录于「最新最全华为OD机试真题(Golang版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!本人所写题库均精心搜集于互联网。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用! 阅读详情

相关推荐

问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。

问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。 实际情况:给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6,1,0就是最小路径和,返回12. 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0

上台阶 有n级台阶。从地面(第0级)出发,首先连续的上台阶,上到不超过第n级的某一个位置后再连续的下台阶,直到回到地面。若每次上下台阶只允许走1级或2级,请问可能的上下台阶的方案数是多少

题目 有n级台阶。从地面(第0级)出发,首先连续的上台阶,上到不超过第n级的某一个位置后再连续的下台阶,直到回到地面。若每次上下台阶只允许走1级或2级,请问可能的上下台阶的方案数是多少? 特别地,在0级站着不动也算一种方案。 数据格式: 输入一行包含两个正整数n和m。 输出一个整数,表示n级台阶有多少种合法的走楼梯方案,答案对m取余。 例如:输入: 2 10007 程序应该输出 6 【样例说明1】 共有6种方案(其中+表示上台阶,-表示下台阶): (1) 原地不动 (2) +1 -1 (3) +2 -2 (

qq_43641195的博客 913

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3778

上台阶问题(递归练习,思路+代码详解)python实现

ways(n)=ways(n-1)+ways(n-2),因为最后上到第n阶时要么从第(n-2)阶上去的,要么从第(n-1)阶上去的,经过多次递归最后回到ways(2)=ways(0)+ways(1)因为ways(0)==1,ways(1)==1,所以可以计算在经过一次次返回便可求出最后的结果。(正向思维不理解没关系,反向思维比较直观)首先使用递归的方法要先确定一个递归终止点,由题目分析当n==0时,ways(0)==1,当n==1时,ways(1)==1,ways(n)代表上n阶台阶可以采取的方式。

Kxiansheng111的博客 5102

【数字图像处理第四版课后习题答案】第2章 数字图像基础(含英文原版)

如图 P2.3 所示,视网膜图像中与点相对应的直径 x 是由类似的三角形得到的。即得出 x = 0.085d。根据第 2.1 节中的讨论,并结合一些自由解释,我们可以将眼窝视为一个方形传感器阵列,拥有大约 337,000 个元素,这相当于一个大约 580×580 个元素的阵列。假设元素间距相等,则在 1.5 毫米长的直线上有 580 个元素和 579 个空间,共计 1,159 个。换句话说,如果一个点的直径 d<1.3×10-6 m,或者 d<15.3×10 m,眼睛就无法检测到这个点。

weixin_56463218的博客 1万+

从零开始:手把手教你做转录组与代谢组的联合分析(含R代码)

本文详细介绍了转录组与代谢组联合分析的全流程,包括数据准备、预处理、差异分析及可视化方法,并提供了实用的R代码示例。通过多组学整合分析,研究者可以更全面地理解生物过程,适用于疾病机制和药物开发等医学研究领域。

weixin_29306317的博客 438

递归函数——上台阶问题

上台阶问题:有n级台阶,每步可以走一级或两级,问有多少种不同的走法 def ways(n): if n == 1: return 1 elif n == 2: return 2 else: return ways(n-1)+ways(n-2) print(ways(4))

weixin_55447224的博客 2412

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1997

python上台阶问题_Python解决N阶台阶走法问题的方法

这篇文章主要介绍了Python解决N阶台阶走法问题的方法,简单描述了走台阶问题,并结合实例形式分析了Python使用递归与递推算法解决走台阶问题的相关操作技巧,需要的朋友可以参考下本文实例讲述了Python解决N阶台阶走法问题的方法。分享给大家供大家参考,具体如下:题目:一栋楼有N阶楼梯,兔子每次可以跳1、2或3阶,问一共有多少种走法?Afanty的分析:遇到这种求规律的问题,自己动动手推推就好,...

weixin_39866087的博客 626

LeRobot 入门教程(十四)Meta-World 机器人多任务与元强化学习操作仿真基准平台

Meta-World是一个开源机器人操作模拟基准平台,专注于多任务与元强化学习研究。该平台提供50项多样化任务(MT50套件),采用标准化评估协议测试算法泛化能力。LeRobot平台支持Meta-World任务评估,提供预处理数据集和训练工具。用户可通过命令行快速训练SmolVLA策略,并评估模型在简单、中等、困难等不同难度任务上的表现。文章还提供了兼容性问题和实用技巧建议,如使用完整MT50任务集测试泛化能力、采用one-hot任务条件化等。这些资源为研究人员开展机器人多任务学习提供了标准化实验环境。

2506_90492529的博客 1017

基金估值核算系统三国杀:恒生 VS 赢时胜 VS 融选!

本文对比分析了恒生电子、赢时胜和融选科技三家金融科技公司的基金估值系统。恒生电子作为行业龙头,在公募基金领域占据较大份额,其新一代估值系统6.0采用微服务架构,自动化程度高;赢时胜在中型公募和券商资管领域优势明显,其V5.5系统在信创适配和复杂产品处理方面表现突出;融选科技作为新兴厂商,提供轻量化解决方案,适合中小型机构。文章从市场格局、系统定位、技术架构、成本构成和用户反馈五个维度进行深入比较,为金融机构选型提供参考。当前估值系统市场呈现"三国鼎立"格局,各具特色,选型需结合机构规模、

magbox520的博客 825

N阶台阶,每次只能走一个台阶或者两个台阶,求一共有多少种走法?

思路: 第n 步,走1步就是n-1步,再求n-1步的走法 走2步就是n-2步,在求n-2的走法 …… 从此,n阶台阶的走法是n-1个台阶的走法加上n-2个台阶的走法 public class Suanfa { /** * @param zyh */ static int sum1=0; public static void main(String[] args) {

菜鸟 1万+

YOLOv8多传感器融合技术——摄像头阵列融合技术详解

本文详细介绍了基于YOLOv8的摄像头阵列融合技术,该技术通过多摄像头协同工作实现360度无死角环境感知。文章阐述了系统原理,包括全方位视野覆盖、冗余设计和深度感知等优势,并提供了完整的Python实现代码。关键技术涵盖多摄像头检测、立体匹配、3D投影和目标融合等模块,支持时间域融合提升稳定性。该系统可显著提高自动驾驶的环境感知能力,减少检测盲区,增强系统可靠性,是L4-L5级自动驾驶的关键技术之一。文章还展示了城市驾驶场景的实际应用,验证了该技术对复杂交通环境的适应能力。

u010117029的博客 213

java解析n阶台阶问题

标题:java解析n阶台阶问题

weixin_45986454的博客 343

偏最小二乘回归分析原理详解和案例分析实例

偏最小二乘回归分析原理详解背景偏最小二乘回归分析 Partial least squares regression analysis基本思想建模步骤步骤一:分别提取两变量组的第一对成分,并使之相关性达最大步骤二:建立 y1,⋯ ,yp\boldsymbol{y}_{1}, \cdots, \boldsymbol{y}_{p}y1​,⋯,yp​ 对 u1\boldsymbol{u}_{1}u1​ 的回归及 x1,⋯ ,xm\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9976

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C走n阶台阶

思路:主要是用到斐波那契数列。

m0_68905122的博客 172

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python输出台阶图案_Python解决N阶台阶走法问题的方法分析

本文实例讲述了Python解决N阶台阶走法问题的方法。分享给大家供大家参考,具体如下:题目:一栋楼有N阶楼梯,兔子每次可以跳1、2或3阶,问一共有多少种走法?Afanty的分析:遇到这种求规律的问题,自己动动手推推就好,1阶有几种走法?2阶有几种走法?3阶有几种走法?4阶有几种走法?5阶有几种走法?对吧,规律出来了!易错点:这不是组合问题,因为第1次走1阶、第2次走2阶不同于 ...

weixin_39743423的博客 1923

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

一只青蛙一次只能跳一阶或两阶台阶,总共要跳n阶,求总共有多少总跳法

思路:对于第n阶,只能从n-1或者n-2阶跳上来,故只能是这两种,对于第n-1阶,又只能从n-2或者n-3阶跳上来,故用一个递归,直到第二阶或第一阶,实现代码如下: public class Solution { public int JumpFloor(int target) { if(target<=0){ return 0;

我的酒馆,名叫夜未央 3623

python输出台阶_Python解决N阶台阶走法问题的方法分析

本文实例讲述了Python解决N阶台阶走法问题的方法。分享给大家供大家参考,具体如下:题目:一栋楼有N阶楼梯,兔子每次可以跳1、2或3阶,问一共有多少种走法?Afanty的分析:遇到这种求规律的问题,自己动动手推推就好,1阶有几种走法?2阶有几种走法?3阶有几种走法?4阶有几种走法?5阶有几种走法?对吧,规律出来了!易错点:这不是组合问题,因为第1次走1阶、第2次走2阶不同于 第1次走2阶、第2次...

weixin_31974757的博客 1085

需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

import java.util.ArrayList; /** * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? * 注意:给定 n 是一个正整数。 * 示例 1: * 输入: 2 * 输出: 2 * 解释: 有两种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 * 2. 2 阶 * ...

happy_bigqiang的博客 2051

楼梯有n阶台阶,上楼可以一步上1阶,2阶,3阶,编程序计算共有多少种不同的走法?

提示:设n阶台阶的走法数为f(n)。如果只有1个台阶,走法有1种(一步上1个台阶),即f(1)=1;如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶),即f(2)=2;如果有3个台阶,走法有4种(一种每次1阶,共一种;另一种是2+1,共两种;第三种是3,共1种),即f(3)=4; 当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是一步上1个台阶的话,之前上了n-

Rocky 2万+

小乐乐上课需要走n阶台阶,因为他的腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?(递归法求解)

当n在增加时,走法就很多了。此时我们假设test(10)是n=10时的10个台阶所有走法,但乐乐一次只能走1阶或者2阶,走1阶时,还剩9阶,那不就是走1阶:test(9)种走法么;也就是当n>2时,test(n) = test(n-1) +test(n-2);不就是2阶:test(8)种走法;两个数相加不就是10阶的走法;当n很小时,n = 1时,有一种走法;n = 2时,有2种走法。

shhajahshhs的博客 234

N阶台阶问题递归算法快速计算(斐波那契数列通项)

解答:设求解函数为,则方法一:由于每次只能上一阶或两阶,所以,,所以可以根据递归思想来求解;在计算机中可以轻易编程实现。方法二:递归思路易懂,易实现,但是耗费时间较长。可以采用矩阵思想,利用矩阵相乘实现快速计算。根据递归公式可知:,所以有,所以递推下去可得故可以轻易求得方法三:特解,根据题目可知,为斐波那契数列,可以根据数列通项公式求解。

u010015480的专栏 364

需要走n阶台阶(c语言)

【代码】需要走n阶台阶(c语言)

scy2429828663的博客 737

爬楼梯问题,一次可以爬1阶,2阶3阶,但是爬了一次3阶以后的K步都不能走3阶,问N个台阶在给定K的情况下有多少种情况

爬楼梯问题,一次可以爬1阶,2阶3阶,但是爬了一次3阶以后的K步都不能走3阶,问N个台阶在给定K的情况下有多少种情况 dp[i][j]dp[i][j]dp[i][j]表示爬到第iii级台阶,距离上次爬三阶步数jjj步的状态。 dp[i][j]dp[i][j]dp[i][j]可以转移到哪些状态? 如果 $0 \leq j < k $ dp[i][j]dp[i][j]dp[i][j]可以转移到dp[i+1][j+1],dp[i+2][j+1]dp[i + 1][j + 1], dp[i + 2][j +

weixin_36709051的博客 1537
上一篇: 九宫重排—题解
下一篇: 高僧斗法—题解
慕一春
博客等级 码龄12年 19粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值