CCF GESP 2026年9月认证 Python 4级

所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
三 编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
新汉诺塔
时间限制:1s 内存限制:512MB

题目描述

汉诺塔问题是最经典的递推问题之一:

有三个可以放圆盘柱子,编号为 $A$、$B$ 和 $C$。

开始时柱子 $A$ 上套着 $n$ 个圆盘,它们从上到下按照从小到大的顺序排列。

我们的任务是要把这 $n$ 个圆盘移到柱子 $C$ 上,并保持它们的原有顺序不变。

在移动圆盘的过程中,需要遵守以下规则:

  1. 圆盘只能从一根柱子顶部拿出,从另一根柱子顶部放入。
  2. 每次只能移动一个圆盘。
  3. 小圆盘必须时刻位于大圆盘之上。

小杨在学习了汉诺塔问题后,决定添加一个新规则:

  1. 每一次移动,圆盘只能从 $A$ 移动到 $B$,从 $B$ 移动到 $C$,或者从 $C$ 移动到 $A$;其它移动是不允许的。

在新规则下,给定圆盘数量 $n$,试问最少移动步数是多少?

输入格式

输入一个正整数 $n$,表示圆盘的数量。

输出格式

输出一个整数,表示在新规则下将 $n$ 个圆盘从 $A$ 移动到 $C$ 所需的最少移动步数。

样例说明

样例 1

输入:
2
输出:
7
样例解释:

以下步骤是最佳的(编号为 1 的是小盘,为 2 的是大盘):

  1. 将 1 从 $A$ 移动到 $B$;
  2. 将 1 从 $B$ 移动到 $C$;
  3. 将 2 从 $A$ 移动到 $B$;
  4. 将 1 从 $C$ 移动到 $A$;
  5. 将 2 从 $B$ 移动到 $C$;
  6. 将 1 从 $A$ 移动到 $B$;
  7. 将 1 从 $B$ 移动到 $C$。

可以证明没有更少步骤可以完成这个任务。

样例 2

输入:
3
输出:
21

数据范围

对于所有数据,$n\le20$

第 2 题
有序网格
时间限制:1s 内存限制:512MB

题目描述

小 A 有一个 $n$ 行 $m$ 列格子组成的二维网格,从上到下依次是第 $1$ 行到第 $n$ 行,从左到右依次是第 $1$ 列到第 $m$ 列。每个格子里有一个数字,第 $i$ 行第 $j$ 列的格子里的数字是 $a_{i,j}$。

小 A 想让二维网格变得有序,因此他先对每一行从左到右按升序排序,再对每一列从上到下按升序排序。以下是一个先完成行排序再完成列排序的例子:

小 A 想知道二维网格经过以上排序后的结果。你能编写程序帮助他吗?

输入格式

第一行,两个正整数 $n,m$,分别二维网格的行数与列数。

接下来 $n$ 行,每行 $m$ 个整数 $a_{i,1},\cdots,a_{i,m}$,表示二维网格种的数字。

输出格式

输出 $n$ 行,每行 $m$ 个整数,表示二维网格先完成行排序再完成列排序后的结果。

样例说明

样例 1

输入:
3 2
6 5
4 3
2 1
输出:
1 2
3 4
5 6

样例 2

输入:
3 4
1 3 2 5
6 2 4 4
5 4 1 3
输出:
1 2 3 5
1 3 4 5
2 4 4 6

数据范围

对于所有测试点,保证 $2\le n\le10$,$2\le m\le10$,$1\le a_{i,j}\le100$。

编程题部分已到底了。

小程序开心码未来

微信扫码,随时随地练 GESP 真题

  • 手机刷题 · 自动判分,错题自动归档到错题本
  • 绑定网站账号后,查看答案解析等权限自动同步
开心码未来小程序二维码(微信扫一扫) 微信扫一扫