当前位置:网站首页>7-5 走楼梯升级版(PTA程序设计)
7-5 走楼梯升级版(PTA程序设计)
2022-07-06 09:22:00 【编程林黛玉】
走楼梯升级版,你前面有n(n>=1)级阶梯,你一次可以走1级阶梯,也可以一次走2级阶梯,还可以1次走三级阶梯,请问n级阶梯的走法有多少种?
输入格式:
请在这里写输入正整数n(n>=1)。
输出格式:
输出n级阶梯的走法。
输入样例:
在这里给出一组输入。例如:
4
样例">输出样例:
在这里给出相应的输出。例如:
7
代码(Python):
def func(n): #设置一个函数
if n==1 or n==2: #可以一次走1阶楼梯或者2阶楼梯
return n #如果n=1(有1阶楼梯)就有一种走法;n=2(有2阶楼梯)就有两种走法
elif n==3: #可以一次走3阶楼梯
return 4 #如果n=3(有3阶楼梯)就有4种走法
else:
return func(n-1)+func(n-2)+func(n-3) #否则,则利用迭代的思想,在函数中调用自身函数
n=int(input()) #输入楼梯阶数
m=func(n) #调用函数
print("%d"%m,end='') #输出结果(下面给出我看到这道题到做出来的过程中的思路,或许会对大家有帮助)
思路:一开始看到这道题的时候,我的脑子里冒出来的第一个词是组合。因为题目中已经给出一次只能走1阶、2阶或者3阶楼梯,所以我一开始想通过组合这三种不同的走法来解题,即走x次1阶楼梯,y次2阶楼梯,z次3阶楼梯,然后x+2*y+3*z=n。但是忽略了x,y,z值相同但顺序不同的情况,发现这样写有些麻烦,而且没有想出具体的实现办法。然后我又想到可以用一种“小学生”的办法,比如,小学的时候老师教加法的时候经常会问如:7能分成几和几,我们回答:1和6,2和5,3和4......然后由于本题中一次只能走1阶、2阶或者3阶楼梯,所以你最终将把7分成里面只有1,2,3的若干组合。于是就有了迭代。迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。这是百度百科给出的迭代概念,在我的理解里,可以理解为“函数里面套用自身函数”。具体到本题中,就是通过迭代,将最终的走的楼梯数都分成1,2,3。于是在上面的函数中就先给出了n为1,2,3时的走法。当n为其他值时,通过迭代,调用自身函数,继续拆分,直到全部拆分为1,2,3为止。下面举例当n为7的时候程序的具体实现,或许可以帮助你加以理解。

上面的程序给出了比较详细的注释,以便新手小白参考。程序的思路设计或者代码实现并不是最优的,欢迎各位大佬指正错误或者给出更优质的思路。
我是一只想成为鲲鹏的菜鸟,大家的鼓励是我前进的动力,欢迎大家点赞收藏评论哦!
边栏推荐
- [the Nine Yang Manual] 2020 Fudan University Applied Statistics real problem + analysis
- 4. Branch statements and loop statements
- 8.C语言——位操作符与位移操作符
- 仿牛客技术博客项目常见问题及解答(一)
- MySQL中count(*)的实现方式
- 4. Binary search
- [中国近代史] 第五章测验
- 20220211-CTF-MISC-006-pure_ Color (use of stegsolve tool) -007 Aesop_ Secret (AES decryption)
- 6. Function recursion
- Questions and answers of "Fundamentals of RF circuits" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
猜你喜欢

4. Branch statements and loop statements

2. C language matrix multiplication

Thoroughly understand LRU algorithm - explain 146 questions in detail and eliminate LRU cache in redis

3. C language uses algebraic cofactor to calculate determinant
![[au cours de l'entrevue] - Comment expliquer le mécanisme de transmission fiable de TCP](/img/d6/109042b77de2f3cfbf866b24e89a45.png)
[au cours de l'entrevue] - Comment expliquer le mécanisme de transmission fiable de TCP

Nuxtjs快速上手(Nuxt2)

C language Getting Started Guide

1.初识C语言(1)

甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1

更改VS主题及设置背景图片
随机推荐
.Xmind文件如何上传金山文档共享在线编辑?
MySQL锁总结(全面简洁 + 图文详解)
7-6 矩阵的局部极小值(PTA程序设计)
Leetcode.3 无重复字符的最长子串——超过100%的解法
抽象类和接口的区别
Questions and answers of "basic experiment" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
Questions and answers of "Fundamentals of RF circuits" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
5. Download and use of MSDN
ArrayList的自动扩容机制实现原理
Questions and answers of "signal and system" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
[中国近代史] 第九章测验
[modern Chinese history] Chapter 9 test
记一次猫舍由外到内的渗透撞库操作提取-flag
8. C language - bit operator and displacement operator
【九阳神功】2017复旦大学应用统计真题+解析
魏牌:产品叫好声一片,但为何销量还是受挫
The difference between overloading and rewriting
[the Nine Yang Manual] 2016 Fudan University Applied Statistics real problem + analysis
Comparison between FileInputStream and bufferedinputstream
仿牛客技术博客项目常见问题及解答(二)