P1255 数楼梯
题目描述
楼梯有 NN 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
- 对于 60\%60% 的数据,N \leq 50N≤50;
- 对于 100\%100% 的数据,1 \le N \leq 50001≤N≤5000。
思路:每一个台阶的走法数量,都来自它前边两个台阶的走法数量加起来的和,既可以用递推也可以用递归,在这里建议大家能用递归的时候尽量用递归,因为后边的很多重要算法都是以递归为基础的,早早培养递归思维可以为以后的学习打好基础。中学时代的时间极其宝贵稀少,高精加减乘除运算直接跳过,把封装好的高精运算方法直接强记下来,考试时候直接用就行。
第一种解法:用python语言写的
1 n=int(input()) 2 sumn=0 3 a=[None]*100 4 a=[1,1] 5 for i in range(2,n+1): 6 a.append(a[i-1]+a[i-2]) 7 print(a[n])
第二种解法:用C++语言,只能过部分样例,因为结果数字非常大,需要高精运算,文章末尾有封装好的方法,套进去即可。
1 #include<iostream> 2 using namespace std; 3 int f(int n) { 4 if (n == 1) return 1; 5 if (n == 2) return 2; 6 return f(n - 1) + f(n - 2); 7 } 8 int main(){ 9 unsigned long long n; 10 cin >> n; 11 cout << f(n); 12 return 0; 13 }
下列代码为套入封装好的高精运算函数,需要注意的是,洛谷官网的课件里的封装代码和课本里的封装代码均有问题,无法直接运行,需要仔细检查修改以后才能使用。
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 struct Bigint { 5 int len, a[100]; 6 Bigint(int x = 0) { // 初始化数值为x 7 memset(a, 0, sizeof(a)); 8 for (len = 1; x; len++) 9 a[len] = x % 10, x /= 10; 10 len--; 11 } 12 // 重载[],可以直接用x[i]代表x.a[i],编写时更加自然 13 int& operator[](int i) { return a[i]; } 14 void flatten(int L) { // 处理进位 15 len = L; 16 for (int i = 1; i <= len; i++) 17 a[i + 1] += a[i] / 10, a[i] %= 10; 18 for (; !a[len];) 19 len--; 20 } 21 void print() { 22 for (int i = max(len, 1); i >= 1; i--) 23 printf("%d", a[i]); // 若数值为0,也需要输出0 24 } 25 }; 26 // 表示两个 Bigint 类相加,返回一个 Bigint 类 27 Bigint operator+(Bigint a, Bigint b) { 28 Bigint c; 29 int len = max(a.len, b.len); 30 for (int i = 1; i <= len; i++) 31 c[i] += a[i] + b[i]; // 计算贡献 32 // 答案不超过 len+1 位,所以用 len+1 做一遍“展平”处理进位。 33 c.flatten(len + 1); 34 return c; 35 } 36 Bigint f[5010]; 37 int main(){ 38 int n; 39 cin >> n; 40 41 f[1] = Bigint(1); 42 f[2] = Bigint(2); 43 for (int i = 3; i <= n; i++) 44 f[i] = f[i - 2] + f[i - 1]; 45 f[n].print(); 46 return 0; 47 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现