(百度算法题)有三种走楼梯方式,走完100阶总共有多少种走法

简介:

原题:

有一100阶层的楼梯,有三种走楼梯方式,一次走一阶,一次走两阶,一次走三阶。用算法实现,走完100阶总共有多少种走法

解答:

f(n)=f(n-1)+f(n-2)+f(n-3)

有两个要点:1,结果大于int32,需要用到高精度。 2,直接递归会有大量重复运算,需要缓存每一步的结果

 

 
  1. #include "stdio.h" 
  2.  
  3. void addCache(char count[], char d[]); 
  4. void reverse(int index); 
  5. void lastMove(int stepOver); 
  6.  
  7. char result[100]; 
  8. char cache[101][100]; 
  9.  
  10. void main() 
  11.     for (int i = 0; i < 101; i++) 
  12.     { 
  13.         cache[i][0] = 0; 
  14.         for (int j = 1; j < 100; j++) 
  15.         { 
  16.             cache[i][j] = 0; 
  17.         } 
  18.     } 
  19.     cache[0][0] = '0'
  20.     cache[1][0] = '1'
  21.     cache[2][0] = '2'
  22.     cache[3][0] = '4'
  23.  
  24.     int floor = 100; 
  25.     lastMove(floor); 
  26.  
  27.     reverse(floor); 
  28.     printf("total: %s", result); 
  29.  
  30. void lastMove(int stepOver) 
  31.     if (stepOver > 3) 
  32.     { 
  33.         for (int i = 1; i <= 3; i++) 
  34.         { 
  35.             int index = stepOver - i; 
  36.             if (cache[index][0] == 0)//not cached 
  37.             { 
  38.                 lastMove(index); 
  39.             } 
  40.             addCache(cache[stepOver], cache[index]); 
  41.         } 
  42.          
  43.     }  
  44.     else 
  45.     { 
  46.         printf("error\n"); 
  47.     } 
  48.  
  49. void addCache(char count[], char d[]) 
  50.     int j = 0; 
  51.     while (d[j] != 0) 
  52.     { 
  53.         int in = d[j] - '0'
  54.         for (int i = j; i < 100; i++) 
  55.         { 
  56.             if (in == 0) 
  57.             { 
  58.                 break
  59.             } 
  60.             if (count[i] == '\0'
  61.             { 
  62.                 count[i] = '0'
  63.             } 
  64.              
  65.             int curNum = count[i] - '0' + in; 
  66.             if (curNum > 9) 
  67.             { 
  68.                 in = curNum / 10; 
  69.                 curNum -= in * 10; 
  70.             } 
  71.             else 
  72.             { 
  73.                 in = 0; 
  74.             } 
  75.             count[i] = curNum + '0'
  76.         } 
  77.          
  78.         j++; 
  79.     } 
  80.      
  81.  
  82. void reverse(int index) 
  83.     int length = 0; 
  84.     for (int i = 0; i < 100; i++) 
  85.     { 
  86.         if (cache[index][i] == 0) 
  87.         { 
  88.             length = i; 
  89.             break
  90.         } 
  91.     } 
  92.      
  93.     for (i = 0; i < length; i++) 
  94.     { 
  95.         result[length - 1 - i] = cache[index][i]; 
  96.     } 
  97.     result[length] = 0; 

 


本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/620918,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 算法
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
阿旭机器学习实战【1】K-近邻算法(KNN)模型应用实例,以及图像表征方式
|
存储 机器学习/深度学习 自然语言处理
【算法的特性,标准,时间维度空间维度计算方式】
【算法的特性,标准,时间维度空间维度计算方式】
219 0
【算法的特性,标准,时间维度空间维度计算方式】
|
算法 开发者
数据结构和算法-二叉树三种遍历方式|学习笔记
快速学习数据结构和算法-二叉树三种遍历方式
135 0
数据结构和算法-二叉树三种遍历方式|学习笔记
|
算法
算法 | 两种方式实现斐波那契数
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”
126 0
算法 | 两种方式实现斐波那契数
|
前端开发 小程序 算法
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法
【微信小程序】基于百度大脑人体检测、人脸识别垃圾分类人体出现在镜头里用红色框将人脸圈出来、用黄色框将手部圈出来,定时器触发后,通过百度返回的top+、left+、width+、height+将拍照的截图用canvas画出来,最后保存上传到阿里云垃圾分类识别检测博主用的是手部关键点识别,手部截取包括手肘部分,当出现手肘没有手掌时会出现截取不到目标的问题,目前解决办法:定时器设置时间长一点供演示员做好调整,另外就是出现手掌,可以尽量把掌心打开方便识别这样手肘部分就不会被检测到了在截取的时候canvas用不了..
259 0
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法
|
算法
手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?
手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?
254 0
|
机器学习/深度学习 算法
【刷穿 LeetCode】求「连通图经过所有点的最短路径」的三种方式 :「BFS」&「Floyd + 状压 DP」 &「AStar 算法」
【刷穿 LeetCode】求「连通图经过所有点的最短路径」的三种方式 :「BFS」&「Floyd + 状压 DP」 &「AStar 算法」
|
算法
百度与赛诺菲达成许可协议,将其算法用于mRNA疫苗和药物开发
百度与赛诺菲达成许可协议,将其算法用于mRNA疫苗和药物开发
106 0
|
消息中间件 缓存 负载均衡
5种限流算法,7种限流方式,挡住突发流量?(三)
5种限流算法,7种限流方式,挡住突发流量?
559 0
|
存储 算法 Java
5种限流算法,7种限流方式,挡住突发流量?(二)
5种限流算法,7种限流方式,挡住突发流量?
237 0
5种限流算法,7种限流方式,挡住突发流量?(二)