C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净

题目大意:王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法。编写一个程序,要求输入楼层,输出王老师上楼的方法总数。

一、大致思路

这道题其实之前大家都有接触过,这道题目的解法也很多,今天要介绍的是递归解法。

我们先把n=1,n=2,n=3,n=4,n=5的情况列举出来,发现,有一个规律,那就是我们常见的斐波那契数列的规律。既然已经发现这个规律,那么就对其进行分类,并递归解决问题。为了让大多数检验结果能顺利输出,在此,运用long大数定义。(因为题目简单,所以就没有在思路上多加叙述,如若不解,还请留言!很喜欢与大家交流学习)

二、具体实现

#include<iostream>
#include<cmath>
using namespace std;
long long calculate(int n)//用long long定义,整形范围更大
{long long a[100] = { 0 };a[0] = 1;//根据逻辑推理得出,所要求的方法数是前两个的和。a[1] = 2;//同上if (n == 1)return 1;else if (n == 2)return 2;elsereturn calculate(n - 1) + calculate(n - 2);//递归求解
}
int main()
{int n;cout << "请输入上楼的楼梯数:" << endl;while (cin >> n){if (n == 0){cout << "输入有误,请重新输入!" << endl;continue;}cout << "对应的走法有:" << endl;cout << calculate(n) << endl;cout << "王老师已成功上楼!" << endl;cout << "请输入下一上楼的楼梯数:(无其他输入请按EOF结束)" << endl;}return 0;
}

那么突发奇想,要是王老师每次走1级或者2级或者3级呢?这样该如何求解呢?

愚拙的我将1-6的方法种类全部列出,发现了这个规律:

calculate(n)=calculate(n-1)+calculate(n-2)+calculate(n-3)。

如下图所示:(我的字不是下面这样的)

二、具体实现

#include<iostream>
#include<cmath>
using namespace std;
long long calculate(int n)//用long long定义,整形范围更大
{long long a[100] = { 0 };a[0] = 1;//根据逻辑推理得出,所要求的方法数是前三个的和。a[1] = 2;//同上a[3] = 4;//同上if (n == 1)return 1;else if (n == 2)return 2;else if (n == 3)return 4;elsereturn calculate(n - 1) + calculate(n - 2) + calculate(n - 3);//递归求解
}
int main()
{int n;cout << "请输入上楼的楼梯数:" << endl;while (cin >> n){if (n == 0){cout << "输入有误,请重新输入!" << endl;continue;}cout << "对应的走法有:" << endl;cout << calculate(n) << endl;cout << "王老师已成功上楼!" << endl;cout << "请输入下一上楼的楼梯数:(无其他输入请按EOF结束)" << endl;}return 0;
}

解决题目的前提:

1、理解题意

2、列举情况并细心观察

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言(CED)查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。(递归实现)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 一、题目大意 查找最接近的元素&#xff08;分治法/二分查找&#xff09;&#xff1a;在一个非降序列中&#xff0c;查找与给定值最接近的元素。…

C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

)输出前k大的数&#xff08;分治法/局部快速排序&#xff09;:给定一个数组&#xff0c;统计前k大的数并且把这k个数从大到小输出。 [输入] 第一行包含一个整数n&#xff0c;表示数组的大小。 第二行包含n个整数&#xff0c;表示数组的元素&#xff0c;整数之间以一个空格分…

C语言(CED)最长公共子序列----动态规划第一题

一、动态规划算法与分治法的异同 相同点&#xff1a; A、二者均是将待求解的问题分成若干子问题来求解。 B、二者在编写代码的时候&#xff0c;都要用到递归。 不同点&#xff1a; A、分治法求解的问题&#xff0c;在将问题分成若干子问题之后&#xff0c;其子问…

C语言(CED)01背包——动态规划第二题

一、问题描述 给定n种物品和一个背包。物品i的质量Wi&#xff0c;其价值Vi&#xff0c;背包的容量为c。问如何选择装入背包中的物品&#xff0c;使得装入背包中的物品总价值最大&#xff1f; 二、解题思想 01背包和最长公共子序列都是动态规划题目中求最优解的问题&#xff0…

C语言(CED)gameboy接馅饼问题

一、题目大意 都说天上不会掉馅饼&#xff0c;但有一天gameboy正走在回家的小径上&#xff0c;忽然天上掉下大把大把的馅饼。这馅饼别处都不掉&#xff0c;就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&#xff0c;所以gameboy马上卸下身上的背包去接。但由…

C语言(CED)递归实现汉诺塔问题

一、问题大意 大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;任何时候&#xff0c;在小圆盘上都不能放大圆盘&#xff0c;…

C语言(CED)智力大冲浪——贪心算法第一题

一、题目大意 小伟报名参加中央电视台的智力大冲浪节目&#xff0c;本次挑战赛吸引了众多参赛者&#xff0c;主持人为了表彰大家的勇气&#xff0c;先奖励每个参赛者m元。先不要太高兴&#xff01;因为这些钱还不一定都是你的&#xff01;接下来主持人宣布了比赛规则&#xff…

C语言(CED)钢条最优切割收益

目录 一、题目大意 二、大致思路 三、具体实现 一、题目大意 一家公司购买长钢条&#xff0c;将其切割成短钢条出售&#xff0c;切割本身没有成本&#xff0c;长度为i的短钢条的价格为Pi。那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大。提示&…

撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)

我们在写paper时&#xff0c;经常会遇到在Word里编写数学公式的问题&#xff0c;其中大多数公式是已经存在的&#xff0c;所以只需要识别、复制、粘贴即可&#xff0c;那么接下来&#xff0c;我就介绍一下“Mathtype”“Mathpix”的方法&#xff0c;分为所需软件、软件操作、公…

家里接入某运营商300M宽带,为何网速还是很慢?(还未装修房屋的请进来)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 引言&#xff1a;家里接入300M的宽带&#xff0c;但是自我感觉网速不佳&#xff0c;遂结合所学知识&#xff0c;对此问题进行分析、研究和调察&…

(CED)列指针与行指针的联系与区别

一、列指针&#xff08;竖为列&#xff09; 1、列指针相关定义 列指针&#xff1a;被称为是指针变量指向二维数组的某个元素 一般使用时会有如下定义&#xff1a; int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代码定义的指针p&#xff0c;一般按照下表方式指向…

一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)

目录 一、下载软件 二、安装 三、编辑器 四、在Pycharm上成功运行Python程序&#xff08;配置Python解释器&#xff09; 一、下载软件 官方下载地址&#xff1a;https://www.python.org/downloads/&#xff08;打开似乎很吃力&#xff0c;必要时刻“挂灯”&#xff09; …

二、Python第二课——变量命名规则及字符串变量相关函数

目录 一、变量命名规则 二、字符串变量及相关函数 1、字符串变量 2、相关函数 最后琐碎杂物&#xff1a; 1、字符串之间的拼接 2、字符串格式控制&#xff08;制表符和换行&#xff09; 一、变量命名规则 正如其他编程语言一样&#xff0c;程序离不开声明变量&#x…

三、Python第三课——Python中数字的用法及编码原则(Python禅意)

目录 一、Python中的数字 1、整数 2、浮点数 3、整数、浮点数和字符串的联系和区别 二、编码原则 1、为代码增加注释 2、Python 禅意 A、编码精美 B、避繁就简 C、无简就繁 D、使用常规方法解决问题 E、先有效、再精巧、逐步升华 一、Python中的数字 编程中&#…

四、Python第四课——Python中列表及其操作(增删改查)

目录 一、Python中的列表 1、列表的定义和赋值 2、列表的使用 二、列表的“增删改查” 1、列表中元素的增加 A、在列表尾添加元素 B、在列表中插入元素 2、列表中“元素的删除” A、使用del语句删除元素 B、使用pop()函数删除元素 C、弹出列表中任何位置元素…

五、Python第五课——Python中组织列表的相关函数

目录 一、用sort()函数对列表进行永久排序 二、用sorted()函数对列表进行临时排序 三、用reverse()函数对列表进行列表原始排序的逆序输出 四、使用len()函数确定列表长度 创建列表后&#xff0c;内部的元素逐渐增多&#xff0c;其排列顺序也是无法预测的&#xff0c;因为…

如何正确下载、安装Codeblocks?

目录 一、Codeblocks的下载 二、Codeblocks的安装 三、Codeblocks的运行 相信很多同学在初学C语言时都会选择一个短小精悍的代码编辑器&#xff0c;如CodeBlocks&#xff08;不说别的了&#xff0c;直接切入正题&#xff09;。 在2020年&#xff08;今年&#xff09;3月份-…

Python:创建列表,其中包含数字1-1000000,为什么Pycharm控制台结果显示不完整?

目录 一、问题描述&#xff08;寻找解决方法的同学直接看“标题二”&#xff09; 二、解决办法 一、问题描述&#xff08;寻找解决方法的同学直接看“标题二”&#xff09; 在学习Python过程中遇到一个这样的问题&#xff0c;也算是一个小BUG吧。题目大意是这样的&#xff…

六、Python第六课——Python中的for循环及数字列表

目录 一、Python中的for循环 1、for循环语句的声明。 2、for循环缩进常见问题 二、数字列表 1、函数range() 2、使用range()函数创建数字列表 3、使用一系列函数处理数字列表&#xff08;统计&#xff09; 4、列表解析&#xff08;生成列表的简洁方法&#xff09; 一…

七、Python第七课——有关列表的二三事(切片、切片的遍历和复制)

目录 一、切片 二、遍历切片 三、列表的复制 一、切片 此前&#xff0c;我们学习了如何访问单个列表以及如何处理列表中的所有元素&#xff0c;那么我们如何处理列表中的部分元素呢&#xff1f;这就引出一个概念“切片” 。我们可以把列表看成是面包&#xff0c;“切片”…