导航:首页 > 源码编译 > 算法实现走楼梯

算法实现走楼梯

发布时间:2022-08-11 02:14:09

㈠ C++爬楼梯,递归函数的使用

(1)首先我们建立一个函数,判断函数的合法性

[cpp] view plain
void jump_ladder(int layer, int* stack, int* top)
{
if(layer <= 0)
return;

return;
}

(2)判断当前的层数是为1或者是否为2

[cpp] view plain
void jump_ladder(int layer, int* stack, int* top)
{
if(layer <= 0)
return;

if(layer == 1){
printf_layer_one(layer, stack, top);
return;
}

if(layer == 2){
printf_layer_two(layer, stack, top);
return;
}

return;
}
(3)对于2中提及的打印函数进行设计,代码补全

[cpp] view plain
#define GENERAL_PRINT_MESSAGE(x)\
do {\
printf(#x);\
for(index = (*top) - 1 ; index >= 0; index --)\
printf("%d", stack[index]);\
printf("\n");\
}while(0)

void printf_layer_one(int layer, int* stack, int* top)
{
int index ;
GENERAL_PRINT_MESSAGE(1);
}

void printf_layer_two(int layer, int* stack, int* top)
{
int index;

GENERAL_PRINT_MESSAGE(11);
GENERAL_PRINT_MESSAGE(2);
}
注: a)代码中我们使用了宏,注意这是一个do{}while(0)的结构,同时我们对x进行了字符串强转

b)当剩下台阶为2的时候,此时有两种情形,要么一次跳完;要么分两次

(4)当阶梯不为1或者2的时候,此时需要递归处理

[cpp] view plain
void _jump_ladder(int layer, int* stack, int* top, int decrease)
{
stack[(*top)++] = decrease;
jump_ladder(layer, stack, top);
stack[--(*top)] = 0;
}

void jump_ladder(int layer, int* stack, int* top)
{
if(layer <= 0)
return;

if(layer == 1){
printf_layer_one(layer, stack, top);
return;
}

if(layer == 2){
printf_layer_two(layer, stack, top);
return;
}

_jump_ladder(layer- 1, stack, top, 1);
_jump_ladder(layer- 2, stack, top, 2);
}
这里在函数的结尾添加了一个函数,主要是递归的时候需要向堆栈中保存一些数据,为了代码简练,我们重新定义了一个函数。

总结:
1)这道题目和斐波那契数列十分类似,是一道地地道道的递归题目
2)递归的函数也需要好好测试,使用不当,极容易堆栈溢出或者死循环。对此,我们可以按照参数从小到大的顺序依次测试,比如说,可以测试楼梯为1、2、3的时候应该怎么运行,同时手算和程序相结合,不断修正代码,完善代码。

㈡ c语言 设计 爬楼梯的方法

我是学pascal的~只说得上来算法
你说的
爬楼梯
是指有n阶楼梯,每次可以上1,2……,p阶(1<=p<=n),问走到最上面有多少种不同的走法吧?
这个就是
递推
啊~
设上i级台阶共有f(i)种不同的方法,很简单就可以知道f(1)=1,f(2)=2……
当i大于2时,分n种情况讨论:第一步上了1级台阶,第一步上了2级台阶,……第一步上了n级台阶。
如果第一步上了1级楼梯,那么还剩下i-1级楼梯,要走完这i-1级楼梯,一共有f(i-1)种方法。
如果第一步上了2级楼梯,那么还剩下i-2级楼梯,要走完这i-2级楼梯,一共有f(i-2)种方法。
……
如果第一步上了n级楼梯,那么还剩下i-n级楼梯,要走完这i-2级楼梯,一共有f(i-n)种方法。
所以,在第一种情况下有f(i-1)种不同走法,第二种情况有f(i-2)种不同走法……这n种情况既没有重复方案,也没有遗漏,因此得出f(i)=f(i-1)+f(i-2)+……+f(i-n)
接着就行了,200阶楼梯都不成问题。

python爬楼梯求至少多少阶梯

假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。

注意:给定 n 是一个正整数。

示例 1:

输入: 2

输出: 2

解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶 和 2 阶

解题思路:

实现了两种方法,但是第一种超出时间限制(。ì _ í。),因为递归的时候方法实际计算了两次。两种方法都使用了动态规划思想,比如对于爬10阶楼梯,我们最后一步爬上第10阶只会有两种情况,一种是从9阶楼梯爬1个台阶,一种是从8阶台阶爬2两个台阶上来。所以10阶台阶问题可以划分为爬9阶和8阶两个子问题,一直递归划分到只剩2阶(2种方法)和1阶(一种方法)。

超出时间限制的代码:

class Solution:

def climbStairs(self, n: int) -> int:

if n<=2:

if n==2:

㈣ 幼儿园爬楼梯算法什么意思

爸爸妈妈要注意观察,当宝宝练至身体微微出汗时就应该停止,以防止运动过度,让宝宝厌倦并以后讨厌走楼梯这个活动,同时也可以防止过度的训练影响宝宝身体骨骼的发育。

㈤ C语言 爬楼梯的问题

用递归解决比较方便:
#include<stdio.h>

int fibonacci (int n)
{
if (n > 2)
return fibonacci(n - 1) + fibonacci(n - 2);
else
return 1;
}

int main()
{
int data[20];
int t;
int i;

printf ("Please input T and the nums: \n");
scanf ("%d", &t);
for (i=0; i<t; i++)
{
scanf("%d", &data[i]);
}
printf("The output: \n");
for (i=0; i<t; i++)
{
printf("%d\n", fibonacci (data[i]+1));
}

return 0;
}
/* 这是斐波那契算法的一个应用,你可以搜索一下 */

㈥ 算法设计 爬楼梯类型,共n阶楼梯,一次最多爬m阶,用JAVA或者C或者C++

循环,,,,,好多循环,,,,哇,,,,实现了
#include<string.h>
#include<iostream>
#include<stack>
using namespace std;

int main()
{
int n = 0, m = 0, sum = 0, cnt = 0;

cout << "输入阶梯数:" << endl;
cin >> n;
cout << "输入最多爬的阶梯数:" << endl;
cin >> m;

if (n <= 0)
{
cout << "就一种,上去了!" << endl;
}
if (m <= 0)
{
cout << "你想上是不可能的!" << endl;
}
int i;
stack<int> sk;

do
{

if (sum <= n)
{
++cnt;

while (sum <= n)
{
sk.push(1);
++sum;
}
}

if (!sk.empty())
{
sum -= sk.top();
sk.pop();
}
else
{
cout << cnt << endl;
return 0;
}
HHH:
if (!sk.empty())
{
i = sk.top();
}
else
{
cout << cnt << endl;
return 0;
}

if (i < m)
{
++i;
}
else
{
if (!sk.empty())
{
sum -= sk.top();
sk.pop();
goto HHH;
}
else
{
cout << cnt << endl;
return 0;
}

}
if (!sk.empty())
{
sum -= sk.top();
sk.pop();
}
else
{
cout << cnt << endl;

return 0;
}
sk.push(i);
sum += i;

} while (1);

return 0;
}

㈦ A/B/C三人同时由地面爬楼梯登上一座高塔

由题可知:
设A/B/C三人所需的步数分别为:a/b/c ,台阶数为X, 则有
X=3a+2=4b+3=5c+4

分析:台阶数不可同时整除3,4,5,则反推,可同时整除3,4,5的最小数为:3*4*5=60,由于台阶数在100~150之间,则可同时整除3,4,5的数为120;

由于三人最后一步只比每步的台阶数少1,则可得台阶数X=120-1=119

㈧ 爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法

简单的dp问题:
#include
int step[2048];
int* p = step;
void foo(int n)
{
if(n > 0) {
if(n > 1) {
*p++ = 2;
foo(n-2);
--p;
}
*p++ = 1;
foo(n-1);
--p;
} else {
for(int* k = step; k != p; ++k)
printf("%d ",*k);
putchar('\n');
}
}
int main()
{
foo(5);
}

阅读全文

与算法实现走楼梯相关的资料

热点内容
电脑遇到服务器问题怎么办 浏览:514
加工中心编程结束方法 浏览:295
了解什么是web服务器 浏览:138
面向对象的编程的基本特征 浏览:717
php定时执行任务linux 浏览:786
php数组中删除元素 浏览:724
萤石云服务器视频 浏览:269
防火墙配置服务器热备的虚拟地址 浏览:188
linux安装xdm 浏览:736
java计算12 浏览:249
大金空调摆动式压缩机 浏览:453
新的云服务器如何设置首页 浏览:687
javastring字符位置 浏览:197
银河麒麟字体库存在哪个文件夹 浏览:957
魔兽加丁服务器的航空叫什么 浏览:152
花冠改装案例哪个app多 浏览:515
成绩单app哪个好用 浏览:140
北美程序员vs国内程序员 浏览:181
php解析xml文档 浏览:121
石墨文档APP怎么横屏 浏览:185