一个人走一个n阶的楼梯,他一步可以走1阶,2阶,3阶,这三种情况,问走完这n阶的楼梯共有多少种不同的走法?
来源:互联网 发布:js全屏幻灯片切换效果 编辑:程序博客网 时间:2024/06/02 08:24
当时脑子不够用,10级楼梯嘛,每一次至少走一步,走完10步最多10次,那么用10个循环可以搞定,够傻逼的吧,看下面。
int method_num = 0;int judge_num = 0;bool judge(int total){judge_num++;if(total > 10)return false;else if(total == 10)++method_num;return true;}void zoulouti2(){for(int i = 1; i <= 3; ++i) {int total = i;if(!judge(total))break;else {for(int j = 1; j <=3; ++j) {total += j;if(!judge(total))break;else {for(int k = 1; k <= 3; ++k) {total += k;if(!judge(total))break;else {for(int l = 1; l <= 3; ++l) {total += l;if(!judge(total))break;else {for(int m = 1; m <= 3; ++m) {total += m;if(!judge(total))break;else {for(int n = 1; n <= 3; ++n) {total += n;if(!judge(total))break;else {for(int o = 1; o <= 3; ++o) {total += o;if(!judge(total))break;else {for(int p = 1; p <= 3; ++p) {total += p;if(!judge(total))break;else {for(int q = 1; q <= 3; ++q) {total += q;if(!judge(total))break;else {for(int r = 1; r <= 3; ++r) {total += r;if(!judge(total))break;}}}}}}}}}}}}}}}}}}}}
这么长,这么粗,引以为戒呀,这代码写给谁看呢,程序员要学会偷懒,代码越精悍越优。
以10级楼梯为例,每次可以走1步、2步、3步,,那么前7步的走法再走3步或者,前8步的走法再走2步,前9步的走法最后走1步,这些步绝对就不会重复了,因为它们的最后一步是不同的。问题就转化为计算前7、8、9步的走法数了。于是有递推公式f(n) = f(n - 1) + f(n - 2) + f(n - 3)
为了加快计算的速度,把计算过的楼梯级使用vector缓存(最喜欢用vector了,但还没精通,失礼失礼)
#include <iostream>#include <vector>using namespace std;static vector<int> louti;int zoulouti1(int n){if(n <= louti.size()) // 已经计算过的楼梯级,直接返回vector里面的值即可return louti[n - 1];int i = louti.size();while(i < n) {// f(n) = f(n - 1) + f(n - 2) + f(n - 3)int zoufa = louti[i - 1] + louti[i - 2] + louti[i - 3];louti.push_back(zoufa);++i;}return louti.back();}void init_louti(){// 只有1、2、3级楼梯,对应的走法louti.push_back(1);louti.push_back(2);louti.push_back(4);}int main(){cout << "请输入楼梯级数:";int n = 0;cin >> n;init_louti();cout << n << "级楼梯的走法有:" << zoulouti1(n) << "种" << endl;}
- 一个人走一个n阶的楼梯,他一步可以走1阶,2阶,3阶,这三种情况,问走完这n阶的楼梯共有多少种不同的走法?
- 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?
- 楼梯有n阶台阶,上楼可以一步上1阶,2阶,3阶,编程序计算共有多少种不同的走法?
- 楼梯有n阶台阶,上楼可以一步上1阶,2阶,3阶,编程序计算共有多少种不同的走法?
- 问题五十七: 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?
- 爬楼梯问题,一共有n阶台阶,每次你可以走1或者2个台阶,到达顶端一共有多少种不同的走法?
- 楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上两阶,编写算法计算共有多少种不同的上楼梯的方法。
- 一个人上楼,他有两种走法,走一阶或走两阶,问他上N阶楼梯有几种走法?
- LUA面试题:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法。
- 楼梯的走法
- n个楼梯,一次可以走1个,2个,,,n个楼梯,打印所有走法
- 动态规划算法在不同阶楼梯中的走法
- n阶方格的走法
- 一个人爬楼梯,一步可以迈一级,二级,三级台阶, 如果楼梯有N级,编写程序,输出所有走法
- 一个人爬楼梯,楼梯共20层,一人一步可以走一层或两层,共多少种走法?
- Arithmetic_ 上楼梯的走法
- Python实现N阶台阶的走法问题
- 也说说有N阶楼梯每次可以选择下1阶、2阶、3阶一共有多少种下法的问题
- jquery validate
- Machine Learning---决策树
- 《coredump问题原理探究》Linux x86版3.8节栈布局之栈溢出coredump例子
- 64位CentOS 6.3 通过VPN借助虚拟机上网
- 哈系查找和二分法
- 一个人走一个n阶的楼梯,他一步可以走1阶,2阶,3阶,这三种情况,问走完这n阶的楼梯共有多少种不同的走法?
- Activity开发要点合集
- 禅道项目管理系统安装后显示为空白
- TMX 高清模式
- leetcode 58: Add Binary
- 眼中IT行业前景
- c++ 中break的用法介绍
- Win7系统上使用Ubuntu12.10安装ns2.35
- 数据库文件和Log文件以及查询数据库信息