CCF编程能力等级认证GESP—C++7级—20250322

news2025/3/31 15:11:45

CCF编程能力等级认证GESP—C++7级—20250322

  • 单选题(每题 2 分,共 30 分)
  • 判断题(每题 2 分,共 20 分)
  • 编程题 (每题 25 分,共 50 分)
    • 图上移动
    • 等价消除

单选题(每题 2 分,共 30 分)

1、下列哪个选项是C++中的关键字?

A. function
B. class
C. method
D. object

正确答案:B

2、下面代码输出的是()

int main() {
	int a = 5, b = 2;
	cout << (a >> b) << endl;
}
A. 1
B. 2
C. 5
D. 10

正确答案:A

3、以下代码的输出是什么?

int main() {
	int a = 10;
	int *p = &a;
	int *&q = p;
	*q = 20;
	cout << a << endl;
	return 0;
}
A. 10
B. 20
C. 地址值
D. 编译错误

正确答案:B

4、下面代码输出的是()

int main() {
	int arr[5] = {1, 2, 3, 4, 5};
	int *p = arr + 2;
	cout << *p << endl;
	return 0;
}
A. 1
B. 2
C. 3
D. 4

正确答案:C

5、下列关于排序的说法,正确的是( )。

A. 选择排序是最快的排序算法之一。
B. 归并排序通常是稳定的。
C. 最差情况,N个元素做快速排序的时间复杂度为O(N)。
D. 最好情况,N个元素做插入排序的时间复杂度为O(N^2)

正确答案:B

6、下面关于C++类构造和析构函数的说法,错误的是( )。

A. 构造函数不能声明为虚函数。
B. 析构函数必须声明为虚函数。
C. 类的默认构造函数可以被声明为private。
D. 类的析构函数可以被声明为private

正确答案:B

7、下列关于树和图的说法,错误的是( )。

A. 树是一种有向无环图,但有向无环图不都是一棵树。
B. 如果把树看做有向图,每个节点指向其子节点,则该图是强连通图。
C. N个顶点且连通的无向图,其最小生成树一定包含N - 1个条边。
D. N + 1个顶点、N条边的有向图,一定不是强连通的。

正确答案:B

8、 2025是个神奇的数字,因为它是由两个数20和25拼接而成,而且 2025 = ( 20 + 25 ) 2 2025 = (20 + 25)^2 2025=(20+25)2。小杨决定写个程序找找小于N的正整数中共有多少这样神奇的数字。下面程序横线处应填入的是( )。

#include <string>
int count_miracle(int N) {
	int cnt = 0;
	for (int n = 1; n * n < N; n++) {
		int n2 = n * n;
		std::string s = std::to_string(n2);
		for (int i = 1; i < s.length(); i++)
			if (s[i] !='0') {
				std::string sl = s.substr(0, i);
				std::string sr = s.substr(i);
				int nl = std::stoi(sl);
				int nr = std::stoi(sr);
				if (_________) // 在此处填入选项
					cnt++;
			}
	}
	return cnt;
}
A. nl + nr == n
B. nl + nr == n2
C. (nl + nr) * (nl + nr) == n
D. (nl + nr) ^ 2 == n2

正确答案:A

9、给定一个无向图,图的节点编号从 0 到 n-1,图的边以邻接表的形式给出。下面的程序使用深度优先搜索(DFS)遍历该图,并输出遍历的节点顺序。横线处应该填入的是()

#include <iostream>
#include <vector>
#include <stack>
using namespace std;
void DFS(int start, vector<vector<int>>& graph, vector<bool>& visited) {
	stack<int> s;
	s.push(start);
	visited[start] = true;
	while (!s.empty()) {
		int node = s.top();
		s.pop();
		cout << node << " "; // 输出当前节点
		// 遍历邻接节点
		for (int neighbor : graph[node]) {
			if (!visited[neighbor]) {
				__________________
				__________________
			}
		}
}
int main() {
	int n, m;
	cin >> n >> m;
	vector<vector<int>> graph(n);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		graph[u].push_back(v);
		graph[v].push_back(u);
	}
	vector<bool> visited(n, false);
	// 从节点 0 开始DFS遍历
	DFS(0, graph, visited);
	return 0;
}
A. 
visited[neighbor] = true;
s.push(neighbor-1);
B.
visited[neighbor] = true;
s.push(neighbor+1);
C.
visited[neighbor] = false;
s.push(neighbor);
D.
visited[neighbor] = true;
s.push(neighbor);

正确答案:D

10、给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持原有顺序的序列。下面的程序横线处应该填入的是()

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int lengthOfLIS(vector<int>& nums) {
	int n = nums.size();
	if (n == 0) return 0;
	vector<int> dp(n, 1);
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < i; j++) {
			if (nums[i] > nums[j]) {
				_________________________
			}
		}
	}
	return *max_element(dp.begin(), dp.end());
}
int main() {
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++) {
		cin >> nums[i];
	}
	int result = lengthOfLIS(nums);
	cout << result << endl;
	return 0;
}
A. dp[i] = max(dp[i], dp[j]);
B. dp[i] = max(dp[i+1], dp[j] + 1);
C. dp[i] = max(dp[i], dp[j] - 1);
D. dp[i] = max(dp[i], dp[j] + 1);

正确答案:D

11、给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持原有顺序的序列。该程序的时间复杂度为()

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int lengthOfLIS(vector<int>& nums) {
	int n = nums.size();
	if (n == 0) return 0;
	vector<int> dp(n, 1);
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < i; j++) {
			if (nums[i] > nums[j]) {
				_________________________
			}
		}
	}
	return *max_element(dp.begin(), dp.end());
}
int main() {
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++) {
		cin >> nums[i];
	}
	int result = lengthOfLIS(nums);
	cout << result << endl;
	return 0;
}
A. O(n^2)
B. O(n)
C. O(log(n))
D. O(nlog(n))

正确答案:A

12、给定两个无向图G1和 G2 ,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关系一致。为了简化问题,假设图的节点编号从 0 到 n-1,并且图的边以邻接表的形式给出。下面程序中横线处应该给出的是()

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
string graphHash(vector<vector<int>>& graph) {
	vector<string> nodeHashes(graph.size());
	for (int i = 0; i < graph.size(); i++) {
		vector<int> neighbors = graph[i];
		sort(neighbors.begin(), neighbors.end());
		string hash;
		for (int neighbor : neighbors) {
			——————————————————————————
		}
		nodeHashes[i] = hash;
	}
	sort(nodeHashes.begin(), nodeHashes.end());
	string finalHash;
	for (string h : nodeHashes) {
		finalHash += h + ";";
	}
	return finalHash;
}
int main() {
	int n;
	cin >> n;
	vector<vector<int>> G1(n);
	for (int i = 0; i < n; i++) {
		int k;
		while (cin >> k) {
			G1[i].push_back(k);
			if (cin.get() =='\n') break;
		}
	}
	vector<vector<int>> G2(n);
	for (int i = 0; i < n; i++) {
		int k;
		while (cin >> k) {
			G2[i].push_back(k);
			if (cin.get() =='\n') break;
		}
	}
	string hash1 = graphHash(G1);
	string hash2 = graphHash(G2);
	if (hash1 == hash2) {
		cout << "YES" << endl;
	} else {
		cout << "NO" << endl;
	}
	return 0;
}
A. hash += to_string(neighbor);
B. hash += to_string(neighbors);
C. hash += to_string(neighbor) + ",";
D. hash -= to_string(neighbors);

正确答案:C

13、给定一个 m×n的二维网格 grid,每个格子中有一个非负整数。请找出一条从左上角 (0, 0) 到右下角 (m-1, n-1) 的路径,使得路径上的数字总和最小。每次只能向右或向下移动。横线处应该填入的是()

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int minPathSum(vector<vector<int>>& grid) {
	int m = grid.size();
	int n = grid[0].size();
	vector<vector<int>> dp(m, vector<int>(n, 0));
	dp[0][0] = grid[0][0];
	for (int j = 1; j < n; j++) {
		dp[0][j] = dp[0][j - 1] + grid[0][j];
	}
	for (int i = 1; i < m; i++) {
		dp[i][0] = dp[i - 1][0] + grid[i][0];
	}
	for (int i = 1; i < m; i++) {
		for (int j = 1; j < n; j++) {
			———————
		}
	}
	return dp[m - 1][n - 1];
}
int main() {
	int m, n;
	cin >> m >> n;
	vector<vector<int>> grid(m, vector<int>(n));
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			cin >> grid[i][j];
		}
	}
	int result = minPathSum(grid);
	cout << result << endl;
	return 0;
}
A. dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][1];
B. dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
C. dp[i][j] = min(dp[i - 1][j], dp[i][j]) + grid[i][j];
D. dp[i][j] = min(dp[i][j], dp[i][j - 1]) + grid[i][j];

正确答案:B

14、给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。下面横线处应该填入的是()

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxSubArray(vector<int>& nums) {
	int n = nums.size();
	if (n == 0) return 0;
	vector<int> dp(n, 0);
	dp[0] = nums[0];
	int maxSum = dp[0];
	for (int i = 1; i < n; i++) {
		maxSum = max(maxSum, dp[i]);
	}
	return maxSum;
}
int main() {
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++) {
		cin >> nums[i];
	}
	int result = maxSubArray(nums);
	cout << result << endl;
	return 0;
}
A. dp[i] = max(nums[i+1], dp[i - 1] + nums[i]);
B. dp[i] = max(nums[i], dp[i - 1] + nums[i]);
C. dp[i] = max(nums[i], dp[i + 1] + nums[i]);
D. dp[i] = max(nums[i], dp[i - 1] + nums[i+1]);

正确答案:B

15、在哈希表的实现中,冲突解决是一个重要的问题。以下哪种方法 不是 常见的哈希表冲突解决策略?

A. 链地址法(Chaining)
B. 开放地址法(Open Addressing)
C. 二次哈希法(Double Hashing)
D. 二分查找法(Binary Search)

正确答案:D

判断题(每题 2 分,共 20 分)

1、在C++语法中,表达式 1e6 、 1000000 和 10^6 的值是相同的。

正确答案:错误

2、在C++语言中,函数调用前必须有函数声明或定义。

正确答案:正确

3、快速排序一般是不稳定的。

正确答案:正确

4、long long 类型能表达的数都能使用 double 类型精确表达。

正确答案:错误

5、使用 math.h 或 cmath 头文件中的函数,表达式 cos(60) 的结果类型为 double 、值约为 0.5 。

正确答案:错误

6、一颗N层的满二叉树,一定有 2 N − 1 2^N - 1 2N1个结点。

正确答案:正确

7、邻接表和邻接矩阵都是图的存储形式。为了操作时间复杂度考虑,同一个图可以同时维护两种存储形式。

正确答案:正确

8、子类对象包含父类的所有成员(包括私有成员)。从父类继承的私有成员也是子类的成员,因此子类可以直接访问。

正确答案:错误

9、动态规划算法通常有递归实现和递推实现。但由于递归调用在运行时会由于层数过多导致程序崩溃,有些动态规划算法只能用递推实现。

正确答案:正确

10、按照下面的规则生成一棵二叉树:以一个人为根节点,其父亲为左子节点,母亲为右子节点。对其父亲、母亲分别用同样规则生成左子树和右子树。以此类推,记录30代的直系家谱,则这是一棵满二叉树。

正确答案:错误

编程题 (每题 25 分,共 50 分)

图上移动

【问题描述】
小 A 有一张包含n个结点与m条边的无向图,结点以1, 2, …, n标号。小 A 会从图上选择一个结点作为起点,每一步移动到某个与当前小 A 所在结点相邻的结点。对于每个结点 i ( 1 ≤ i ≤ n ) i(1 \le i \le n) i1in,小 A 想知道从结点i出发恰好移动1, 2, …, k步之后,小 A 可能位于哪些结点。由于满足条件的结点可能有很多,你只需要求出这些结点的数量。
【输入格式】
第一行,三个正整数n, m, k,分别表示无向图的结点数与边数,最多移动的步数。
接下来m行,每行两个正整数 u i , v i u_i, v_i ui,vi,表示图中的一条连接结点 u i u_i ui v i v_i vi的无向边。
【输出格式】
共n行,第i行 ( i ≤ i ≤ n ) (i \le i \le n) iin包含k个整数,第j个整数 ( 1 ≤ j ≤ k ) (1 \le j \le k) 1jk表示从结点i出发恰好移动j步之后可能位
于的结点数量。
【样例输入 1】
4 4 3
1 2
1 3
2 3
3 4
【样例输出 1】
2 4 4
2 4 4
3 3 4
1 3 3
【数据范围】
对于20% 的测试点,保证k = 1。
对于另外20% 的测试点,保证 1 ≤ n ≤ 50 , 1 ≤ m ≤ 50 1 \le n \le 50,1 \le m \le 50 1n501m50
对于所有测试点,保证 1 ≤ n ≤ 500 , 1 ≤ m ≤ 500 , 1 ≤ k ≤ 20 , 1 ≤ u i , v i ≤ n 1 \le n \le 500,1 \le m \le 500,1 \le k \le 20,1 \le u_i,v_i \le n 1n5001m5001k201ui,vin

等价消除

【问题描述】
小 A 有一个仅包含小写英文字母的字符串S。
对于一个字符串,如果能通过每次删去其中两个相同字符的方式,将这个字符串变为空串,那么称这个字符串是可以被等价消除的。
小 A 想知道 有多少子串是可以被等价消除的。
一个字符串S’是S的子串,当且仅当删去S的某个可以为空的前缀和某个可以为空的后缀之后,可以得到S’。
【输入格式】
第一行,一个正整数|S|,表示字符串S的长度。
第二行,一个仅包含小写英文字母的字符串S。
【输出格式】
一行,一个整数,表示答案。
【样例输入 1】
7
aaaaabb
【样例输出 1】
9
【样例输入 2】
9
babacabab
【样例输出 2】
2
【数据范围】
对于20% 的测试点,保证S中仅包含a和b两种字符。
对于另外20% 的测试点,保证 1 ≤ ∣ S ∣ ≤ 2000 1 \le |S| \le 2000 1S2000
对于所有测试点,保证 1 ≤ ∣ S ∣ ≤ 2 × 1 0 5 1 \le |S| \le 2 \times 10^5 1S2×105

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】深入解析Linux命名管道(FIFO):原理、实现与实战应用

本文承接上文匿名管道&#xff1a;【Linux】深度解析Linux进程间通信&#xff1a;匿名管道原理、实战与高频问题排查-CSDN博客 深入探讨Linux进程间通信&#xff08;IPC&#xff09;&#xff0c;以匿名管道为核心&#xff0c;详细阐述其通信目的、实现前提及机制。涵盖数据传输…

第十四届蓝桥杯省赛电子类单片机学习记录(客观题)

01.一个8位的DAC转换器&#xff0c;供电电压为3.3V&#xff0c;参考电压2.4V&#xff0c;其ILSB产生的输出电压增量是&#xff08;D&#xff09;V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析&#xff1a; ILSB&#xff08;最低有效位&#xff09;的电压增量计算公式…

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…

Apache Shiro 统一化实现多端登录(PC端移动端)

Apache Shiro 是一个强大且易用的Java安全框架&#xff0c;提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序&#xff0c;包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下&#xff…

NAT—地址转换(实战篇)

一、实验拓扑&#xff1a; 二、实验需求&#xff1a; 1.实现内网主机访问外网 2.实现外网客户端能够访问内网服务器 三、实验思路 1.配置NAT地址池实现内网地址转换成公网地址&#xff0c;实现内网主机能够访问外网。 2.配置NAT Sever实现公网地址映射内网服务器地址&…

用HTML和CSS生成炫光动画卡片

这个效果结合了渐变、旋转和悬浮效果的炫酷动画示例&#xff0c;使用HTML和CSS实现。 一、效果 二、实现 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&quo…

FPGA_YOLO(三)

上一篇讲的是完全映射&#xff0c;也就是block中的所包含的所有的卷积以及归一&#xff0c;池化卷积 举例总共6个等都在pl侧进行处理&#xff08;写一个top 顶层 里面conv 1 bn1 relu1 pool1 conv1*1 conv 2 bn2 relu2 pool2 conv1*1 ....总共6个 &#xff09;&#xff0c;…

旅游CMS选型:WordPress、Joomla与Drupal对比

内容概要 在旅游行业数字化转型进程中&#xff0c;内容管理系统&#xff08;CMS&#xff09;的选择直接影响网站运营效率与用户体验。WordPress、Joomla和Drupal作为全球主流的开源CMS平台&#xff0c;其功能特性与行业适配性存在显著差异。本文将从旅游企业核心需求出发&…

全面适配iOS 18.4!通付盾加固产品全面升级,护航App安全上架

引言&#xff1a; 苹果官方新规落地&#xff01; 自2025年4月24日起&#xff0c;所有提交至App Store Connect的应用必须使用Xcode 16或更高版本构建&#xff0c;否则将面临审核驳回风险&#xff01;Beta版iOS 18.4、iPadOS 18.4现已推出&#xff0c;通付盾iOS加固产品率先完成…

一台电脑最多能接几个硬盘?

在使用电脑时&#xff0c;硬盘空间不够是许多用户都会遇到的问题。无论是摄影师、剪辑师等需要大量存储空间的专业人士&#xff0c;还是游戏玩家、数据备份爱好者&#xff0c;都可能希望通过增加硬盘来扩展存储容量。然而&#xff0c;一台电脑究竟最多能接多少个硬盘&#xff1…

【玩转全栈】---- Django 基于 Websocket 实现群聊(解决channel连接不了)

学习视频&#xff1a; 14-11 群聊&#xff08;一&#xff09;_哔哩哔哩_bilibili 目录 Websocket 连接不了&#xff1f; 收发数据 断开连接 完整代码 聊天室的实现 聊天室一 聊天室二 settings 配置 consumer 配置 多聊天室 Websocket 连接不了&#xff1f; 基于这篇博客&…

如何快速解决django报错:cx_Oracle.DatabaseError: ORA-00942: table or view does not exist

我们在使用django连接oracle进行编程时&#xff0c;使用model进行表映射对接oracle数据时&#xff0c;默认表名组成结构为&#xff1a;应用名_类名&#xff08;如&#xff1a;OracleModel_test&#xff09;&#xff0c;故即使我们库中存在表test&#xff0c;运行查询时候&#…

本地安装git

下载git 通过官网 下载 &#xff1a;Git - Downloading Package 若此页面无法直达&#xff0c;请删掉download/win尝试 2.双击运行安装 选择安装目录&#xff1a; 选择配置&#xff0c;默认不动 git安装目录名 默认即可 Git 的默认编辑器&#xff0c;建议使用默认的 Vim 编辑器…

小程序内表格合并功能实现—行合并

功能介绍&#xff1a;支付宝小程序手写表格实现行内合并&#xff0c;依据动态数据自动计算每次需求合并的值&#xff0c;本次记录行内合并&#xff0c;如果列内合并&#xff0c;同理即可实现 前端技术&#xff1a;grid布局 display&#xff1a;grid 先看实现效果: axml&…

SSE协议介绍和python实现

概述&#xff1a; SSE&#xff08;Server-Sent Events&#xff09;协议是一种允许服务器向客户端实时推送更新的技术&#xff0c;基于HTTP协议&#xff0c;常用于实时数据推送特点&#xff1a; 单向通信&#xff1a;服务器向客户端推送数据&#xff0c;客户端无法发送数据。基…

甘肃旅游服务平台+论文源码视频演示

4 系统设计 4.1系统概要设计 甘肃旅游服务平台并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的小程序结构&am…

WebRTC中音视频服务质量QoS之FEC+NACK调用流程

WebRTC中音视频服务质量QoS之FECNACK调用流程 WebRTC中音视频服务质量QoS之FECNACK调用流程 WebRTC中音视频服务质量QoS之FECNACK调用流程前言一、WebRTC中FEC基础原理1. FEC基础操作 异或操作XOR2、 FEC中 行向和纵向 计算3、 WebRTC中 媒体包分组和生成FEC的包数① kFecRateT…

神经网络知识点整理

目录 ​一、深度学习基础与流程 二、神经网络基础组件 三、卷积神经网络&#xff08;CNN&#xff09;​编辑 四、循环神经网络&#xff08;RNN&#xff09;与LSTM 五、优化技巧与调参 六、应用场景与前沿​编辑 七、总结与展望​编辑 一、深度学习基础与流程 机器学习流…

远程办公新体验:用触屏手机流畅操作电脑桌面

在数字化浪潮的推动下&#xff0c;远程办公已从“应急选项”转变为职场常态。无论是居家隔离、差旅途中&#xff0c;还是咖啡厅临时办公&#xff0c;高效连接公司电脑的需求从未如此迫切。然而&#xff0c;传统的远程控制软件常因操作复杂、画面卡顿或功能限制而影响效率。如今…

【面试八股】:常见的锁策略

常见的锁策略 synchronized &#xff08;标准库的锁不够你用了&#xff09;锁策略和 Java 不强相关&#xff0c;其他语言涉及到锁&#xff0c;也有这样的锁策略。 1. 悲观锁&#xff0c;乐观锁&#xff08;描述的加锁时遇到的场景&#xff09; 悲观锁&#xff1a;预测接下来…