c语言 设计 爬楼梯的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 设计 爬楼梯的方法相关的知识,希望对你有一定的参考价值。

高手帮忙啊!!

20阶楼梯

参考技术A 我是学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阶楼梯都不成问题。
参考技术B 说清楚一些

爬楼梯,计算有多少种方法(1125)

题目描述:

楼梯有n级台阶,上楼可以一步上1级,也可以一步上2级,计算有多少种不同的走法

其中n<=35

输入描述:

一个正整数n,占一行

输出描述:

一个整数,占一行,问题的结果,数据保证输出在32位有符号整型数据范围内。

样例输入:

20

33

样例输出:

10946

5702887

思想:巧妙利用了分治递归的思想,将大数 化为1和2两种情况,1只有一种情况,2有两种情况,设计巧妙。

 1 #include<iostream>
 2 using namespace std;
 3 int fun(int n)
 4     if(n>0)
 5         if(n==1)
 6             return 1;
 7         
 8         if(n==2)
 9             return 2;
10         
11         else
12             return fun(n-1)+fun(n-2);
13         
14     
15     else
16         return 0;
17     
18 
19 int main()
20     int p,m;
21     while(cin>>p)//多组输入
22         m=fun(p);
23         cout<<m<<endl;
24     
25     return 0;
26 

 

以上是关于c语言 设计 爬楼梯的方法的主要内容,如果未能解决你的问题,请参考以下文章

Python算法-爬楼梯与递归函数

《程序设计与算法算法基础》《第二周 递归》爬楼梯 4017

假设你正在爬楼梯。需要 n 阶你才能到达楼顶

爬楼梯问题【多解法】

爬楼梯

【算法题】12.爬楼梯问题