上楼梯问题

【面试题】已知楼梯有20阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,请编写一个函数计算一种有多少上楼梯的方式。

#include "stdio.h"
#include "math.h"#define  MAX_STEPS  20   /*定义20个台阶的楼梯*/int Steps[MAX_STEPS] = {0};  /*Steps[i]等于1或者2,记录第i步登上的台阶数*/
int count = 0;             /*记录上楼梯方案的数目*/void Upstairs(int footStep, int haveUpstairedCount, int steps) {/*参数footStep为当前要登的台阶数, haveUpstairedCount是已走过的阶数,steps为走过的步数*/int i;if (haveUpstairedCount + footStep == MAX_STEPS) {  /*已走过的台阶数+当前要登的台阶数=20,得到一种上楼梯的方案*/Steps[steps] = footStep;    /*记录下这一步登上的台阶数*/for (i=0; i<=steps; i++) {  /*输出这中上楼梯的方案*/printf("%d ", Steps[i]);}getchar();printf("\n");count++;;                        /*累计上楼梯的方案数目*/return;}if (haveUpstairedCount + footStep > MAX_STEPS) {  /*超过了楼梯的阶数,后续的解空间树不再探索*/return;}Steps[steps] = footStep;        /*记录当前上楼梯的阶数*/haveUpstairedCount = haveUpstairedCount + footStep; /*记录目前已走过的台阶数*/steps++;                       /*步数加1*/for (i=1; i<=2; i++) {           /*递归探索后续的分支*/Upstairs(i, haveUpstairedCount, steps);}
}void Upstairs_All() {Upstairs(1,0,0);  /*从第一步上1个台阶开始探索解空间树*/Upstairs(2,0,0);   /*从第一步上2个台阶开始探索解空间树*/
}main() {Upstairs_All();printf("共有%d种走法\n",count);    /*输出上楼梯方案的总数*/getchar();
}

面试经典算法-上楼梯问题相关推荐

  1. 面试经典算法题集锦——《剑指 offer》小结

    本文转载自: http://www.cnblogs.com/fanling999/p/7810558.html 作者:fanling999 转载请注明该声明. 从今年 3 月份开始准备找实习,到现在校 ...

  2. 【算法】PHP实现经典算法(上)

    前言 下面的是通过PHP实现经典算法,并计算了耗时,可以通过耗时对比这几种算法的复杂度. 插入排序 冒泡排序 选择排序 并归排序 快速排序 CODE $arr = [];for ($i = 0; $i ...

  3. 面试经典算法题--爬楼梯 的六种解法

    题目描述: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 六种解法: /*** 爬楼梯问题其实质就是斐波那契数列!*/ public cla ...

  4. 四道微软面试经典算法题

    比较经典的四个算法题,目前只收集到相关的思路和个别题目的解法,不断更新中 1.一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现.0是例外,可以反复出现. 请设计一个算法, ...

  5. 面试经典算法-将大于2的某一个数分解成两个素数之和

    将大于2的某一个数分解成两个素数之和 [面试题]输入一个大于2的偶数n,将n分解成为两个素数之和,有几对就输出几对.(注意 :1 不是素数) #include <stdio.h>/*子算法 ...

  6. 算法 - 上楼梯(跳台阶)

    楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,走完n阶台阶共有多少种不同的走法? 假设n阶台阶有f(n)种走法,第1步有2种走法 如果上1阶,那就还剩n - 1阶,共f(n - 1)种走法 如 ...

  7. 经典算法——爬楼梯(解法归纳)(学习笔记)

    问题分析 假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?是引用 当n=1时,只需爬一个台阶,就是一种解法. 当n=2时,可以走两次 ...

  8. C语言编程左右对称,C语言经典算法 - 上三角、下三角、对称矩阵

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 说明 上三角矩阵是矩阵在对角线以下的元素均为0,即Aij = 0,i > ...

  9. 10个经典的C语言面试基础算法及代码

    算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数 ...

最新文章

  1. 简单搞定linux逻辑卷
  2. go mod require + replace解决本地包依赖问题
  3. matlab两个图共用一个x轴_如何在Matlab中插入两个X轴图
  4. GitHub 上 57 款最流行的开源深度学习项目【转】
  5. hdfs数据节点分发什么协议_HDFS主要节点解说(一)节点功能
  6. PADS Layout VX.2.3 制作PCB封装(Decal)时,导入DXF文件
  7. java反射异常之java.lang.NoSuchFieldException: school
  8. 新闻资讯java开发_新闻资讯app开发的功能与意义
  9. 国家一级计算机考试模拟题2012版,2012年计算机等级考试一级上机Word模拟题2
  10. 张近东发致家乐福中国员工内部信:唯有坚持、坚守才能取得更大的成功
  11. Mysql递归查询优化记录
  12. 耳机常用降噪技术分析
  13. 业务,大数据监控平台搭建
  14. 樊登读书会掌控读后感_樊登读书会观后感
  15. 用matlab算特征值,用Matlab用计算特征值和特征向量
  16. JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...
  17. 用jQuery仿京东收货地址
  18. 精读《设计模式 - Prototype 原型模式》
  19. 奶块服务器维护多久,奶块服务器维护是什么意思quest; | 手游网游页游攻略大全...
  20. c++生成so调用LOGI

热门文章

  1. 自学Java day17 jvav网络编程 从jvav到架构师
  2. 飞卡日常进度之K60DN/K60FX/K66对比
  3. android linux 休眠 深度睡眠 查看 方法 调试
  4. 计算机网络谢希仁第七版课后习题答案(第九章)
  5. PaddleOCR体检报告识别
  6. Kotlin读写Excel文件
  7. 基于Hololens开发---本地化空间锚点
  8. 企业视频直播如何嵌入企业微信公众号?
  9. php进行Markdown解析
  10. 如何用HTML和css实现拼图,打造自己的html5拼图小游戏