2025年6月CCF—GESP(C++四级)编程能力等级认证试卷
四级
2025
2026-04-01 11:05:07
132次
一、单选题
为了提高冒泡排序的效率,如果某轮“冒泡”中没有执行任何交换操作,说明数组已经完成排序,可直接返回结果,则两条横线上分别应该填写?( )
void bubbleSortWithFlag(vector<int> &nums) {
for (int i = nums.size() - 1; i > 0; i--) {
bool flag;
________________ // 在此处填入代码
for (int j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums[j], nums[j + 1]);
___________________________ // 在此处填入代码
}
}
if (!flag)
break;
}
} | A. flag = false; flag = false; |
B. flag = false; flag = true; |
| C. flag = true; flag = false; |
D. flag = true; flag = true; |
【知识点】 CCF—GESP C++四级
二、判断题
下面C++代码在一个结构体中又定义了别的结构体。这种结构嵌套定义的方式语法不正确。( )
#include <string>
#include <vector>
using namespace std;
struct Library {
struct Book {
struct Author {
string name;
int birthYear;
};
string title;
int year;
Author author;
};
string name;
vector<Book> books;
} | A.正确 | B.错误 |
【知识点】 CCF—GESP C++四级
三、编程题
排序
时间限制:1 s,内存限制:512 MB
【问题描述】
体育课上有 n 名同学排成一队,从前往后数第 i 位同学的身高为 hi,体重为 wi。
目前排成的队伍看起来参差不齐,老师希望同学们能按照身高从高到低的顺序排队,如果身高相同则按照体重从重到轻排序。
在调整队伍时,每次只能交换相邻两位同学的位置。老师想知道,最少需要多少次交换操作,才能将队伍调整成目标顺序。
【输入描述】
第一行,一个正整数 n,表示队伍人数。
接下来 n 行,每行两个正整数 hi 和 wi,分别表示第 i 位同学的身高和体重。
【输出描述】
输出一行,一个整数,表示最少需要的交换次数。
【样例输入1】
5 1 60 3 70 2 80 4 55 4 50
【样例输出1】
8
【样例输入2】
5 4 0 4 0 2 0 3 0 1 0
【样例输出2】
1
【数据范围】
对于所有测试点,保证 1 <= n <= 3000,0 <= hi、wi<= 10^9。
【知识点】 CCF—GESP C++四级
画布裁剪
时间限制:1 s,内存限制:512 MB
【问题描述】
小 A 在高为 h 宽为 w 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。
具体来说,画布可以视为 h 行 w 列的字符矩阵,其中的字符均为 ASCII 码位于 33~126 之间的可见字符,小 A只保留画布中由第 x1 行到第 x2 行、第 y1 列到第 y2 列构成的子矩阵。
小 A 将画布交给了你,你能帮他完成画布的裁剪吗?
【输入描述】
第一行,两个正整数 h、w,分别表示画布的行数与列数。
第二行,四个正整数 x1、x2、y1、y2,表示保留的行列边界。
接下来 h 行,每行一个长度为 w 的字符串,表示画布内容。
【输出描述】
输出共 x2 - x1 + 1 行,每行一个长度为 y2 - y1 + 1 的字符串,表示裁剪后的画布。
【样例输入1】
3 5 2 2 2 4 ..... .>_<. .....
【样例输出1】
>_<
【样例输入2】
5 5 1 2 3 4 AbCdE fGhIk LmNoP qRsTu VwXyZ
【样例输出2】
Cd hI
【数据范围】
对于所有测试点,保证 1 <= h、w <= 100,1 <= x1 <= x2 <= h,1 <= y1 <= y2 <= w。
【知识点】 CCF—GESP C++四级



