Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(一):面向过程—Python程序设计训练场—进阶之道(7)

6.3.6 跳台阶

题目描述:

一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第 n 级台阶一共有多少种方案。

输入格式:

共一行,包含一个整数 n。

输出格式:

共一行,包含一个整数,表示方案数。

输入样例:

5

输出样例:

8

在线评测环境AcWing 821. 跳台阶

代码:

def steps(n):
    if n==1 or n==2:
        return n
    return steps(n-1)+steps(n-2)
n = int(input())
a = steps(n)
print(a)

6.3.7 走方格

题目描述:

给定一个 n×m 的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m) 一共有多少种不同的走法。

输入格式:

共一行,包含两个整数 n 和 m。

输出格式:

共一行,包含一个整数,表示走法数量。

输入样例:

2 3

输出样例:

10

在线评测环境:AcWing 822. 走方格

代码:

def dfs(x, y):
    global a
    if x == n and y == m:
        a += 1
    else:
        if x < n:
            dfs(x + 1, y)
        if y < m:
            dfs(x, y + 1)
global n, m
a = 0
n, m = map(int, input().split())
a = 0
dfs(0, 0)
print(a)

6.3.8 排列

题目描述:

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式:

共一行,包含一个整数 n。

输出格式:

按字典序输出所有排列方案,每个方案占一行。

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

在线评测环境:AcWing 823. 排列

代码:

def array(d):
    global n, ans, res
    if n == d:
        for x in range(n):
            print(ans[x], end = ' ')
        print()
        return
    for x in range(1, n + 1):
        if not res[x]:
            ans[d] = x
            res[x] = 1
            array(d + 1)
            res[x] = 0
ans = [0] * 10
res = [0] * 10
n = int(input())
array(0)

6.3.9 蛇形矩阵

题目描述:

输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1 到 n×m按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式:

输入共一行,包含两个整数 n 和 m。

输出格式:

输出满足要求的矩阵。

矩阵占 n 行,每行包含 m 个空格隔开的整数。

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

在线评测环境:AcWing 756. 蛇形矩阵

代码:

n, m = input().split()
m = int(m)
n = int(n)
l = [[0] * m for i in range (n)]
x = y = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
d = 1
for i in range(1, m * n + 1):
    l[x][y] = i
    a = x + dx[d]
    b = y + dy[d]
    if a < 0 or a >= n or b < 0 or b >= m or l[a][b]>0:
        d = (d + 1) % 4
        a = x + dx[d]
        b = y + dy[d]
    x = a
    y = b
for i in range(n):
    for j in range(m):
        print(l[i][j], end = ' ')
    print('')

*6.4 关于程序设计竞赛

注:本小节带 *,不需要进行学习,可以简单进行了解

⛲️ 面向过程是代码的核心思想,它涉及众多的算法,如果你还是大一或者大二,那么我强烈建议你去参加算法竞赛,如:ICPC,CCPC,CCSP,蓝桥杯,GPLT团队程序设计天梯赛,​,以及一些能力测试:CCF-CSP,PAT(甲级,顶级),你可以通过一些小型比赛去积累经验,比如:全国高校计算机能力挑战赛,全国大学生算法设计与编程挑战赛,这里给出一些网址,需要的读者可以进网址去了解详情:

ICPC:The ICPC International Collegiate Programming Contest

CCPC:中国大学生程序设计竞赛(CCPC)-官网

CCSP:CCSP(CCF大学生计算机系统与程序设计竞赛)

蓝桥杯:蓝桥杯大赛——全国大学生TMT行业赛事

GPLT团队程序设计天梯赛:团队程序设计天梯赛

CCF-CSP:CCF-CSP认证

PAT:PAT计算机程序设计能力考试

全国高校计算机能力挑战赛:2021年第三届全国高校计算机能力挑战赛

全国大学生算法设计与编程挑战赛:赛氪竞赛网

❗️ 注:上述的所有比赛都需要算法基础,这是现在的我们所不具备的,目前我们只掌握了语言的基础,上述比赛感兴趣的读者自行去了解,我也写过一些算法博客,可供大家学习,这些算法博客是用 C++ 去写的,如果你要参加算法竞赛,那么 C++ 是你必须学会的语言,而不是 Python:算法基础内容汇总,算法提高内容汇总,当然,这有点扯远了,本博客的目的是给大家讲解 Python 语言,是面向企业和工作的,和算法竞赛无任何关联,上述只是给小部分读者所解释