CCF编程能力等级认证GESP—C++6级—20230923

CCF编程能力等级认证GESP—C++6级—20230923

  • 单选题(每题 2 分,共 30 分)
  • 判断题(每题 2 分,共 20 分)
  • 编程题 (每题 25 分,共 50 分)
    • 小杨买饮料
    • 小杨的握手问题
  • 答案及解析
    • 单选题
    • 判断题
    • 编程题1
    • 编程题2

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

1、近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流⾏,其中包括⽐较常用的手写板,那么它属于哪类设备?( )。

A. 输⼊
B. 输出
C. 控制
D. 记录

2、如果 a 和 b 均为 int 类型的变量,且 b 的值不为0 ,那么下列能正确判断“ a 是 b 的 3 倍”的表达式是( )。

A. (a >> 3 == b)
B. (a - b) % 3 == 0
C. (a / b == 3)
D. (a == 3 * b)

3、以下不属于面向对象程序设计语言的是( )。

A. C++
B. Python
C. Java
D. C

4、下⾯有关 C++类定义的说法,错误的是( )。

A. C++类实例化时,会执行构造函数。
B. C++自定义类可以通过定义构造函数实现自动类型转换。
C. C++自定义类可以通过重载 >< 等运算符实现⼤⼩比较。
D. C++自定义类可以包含任意类型的成员。

5、有关下⾯C++代码的说法,错误的是( )。

#include <iostream>
#include <string> 
using namespace std;class MyStr {string data;
public:MyStr(string _data): data(_data){}
};
int main(){MyStr st("ABC");cout << st << endl; return 0;
}
A. 代码 cout << st << endl; 不会报错,将正常输出 ABC 。
B.6 ⾏代码的 data 是 MyStr 类的成员变量。
C. 代码 MyStr st("ABC"); 不会报错,将执⾏构造函数。
D. 以上说法均没有错误。

6、下列关于命名空间的说法错误的是( )。

A. 命名空间可以嵌套, 例如 namespace A { namespace B { int i;}} 。
B. 命名空间只可以在全局定义。
C. 命名空间中可以存放变量和函数。
D. 如果程序中使⽤了 using 命令同时引用了多个命名空间,并且命名空间中存在相同的函数,会出现程序运行错误。

7、有关下⾯C++代码的说法,正确的是( )。

#include <iostream>using namespace std;class ManyData{int * __data;int head, tail, capacity;
public:ManyData(int cap){capacity = cap;__data = new int[capacity];head = tail = 0;}void push(int val){__data[tail++] = val;}int pop(){return __data[--tail];}int size(){return tail - head;}
};
int main(){auto myData = ManyData(100);myData.push(1); myData.push(2); myData.push(3); myData.push(100);cout << myData.size() << endl; cout << myData.pop() << endl; return 0;
}
A.这段代码不能正常运行。
B. ManyData 类可⽤于构造队列(Queue)数据结构。
C.在上⾯代码环境,代码 cout<< myData.__data[0] << endl; 可以增加到代码main 函数末尾( return 0; 之前),且不会导致报错。
D.可以为 ManyData 类的 push()pop() 函数增加异常处理代码,否则在使用ManyData 类时可能导致运⾏时错误或逻辑错误(不⼀定局限于上述代码中的main 函数)。

8、有关下⾯C++代码的说法,错误的是( )。

#include <iostream>using namespace std;class MoreData{int * __data;int head, tail, capacity;
public:MoreData(int cap){capacity = cap;__data = new int[capacity];head = tail = 0;}MoreData & push(int val){__data[tail++] = val;return *this;}int pop(){return __data[head++];}int size(){return tail - head;}
};
int main(){auto myData = MoreData(100);myData.push(1); myData.push(2); myData.push(3); myData.push(11).push(12).push(13);cout << myData.pop() << endl;return 0;
}
A. MoreData 类可⽤于构造队列(Queue)数据结构。
B. 代码第 29⾏,连续 push() 的⽤法将导致编译错误。
C. __data 是 MoreData 类的私有成员,只能在类内访问。
D. 以上说法均没有错误。

9、某内容仅会出现 ABCDEFG ,其对应的出现概率为0.40、0.30、0.15、0.05、0.04、0.03、0.03,如下图所⽰。按照哈夫曼编码规则,假设B 的编码为11,则 D 的编码为( )。
在这里插入图片描述

A. 10010
B. 10011
C. 10111
D. 10001

10、下⾯有关格雷码的说法,错误的是( )。

A. 在格雷码中,任意两个相邻的代码只有⼀位二进制数不同。B. 格雷码是⼀种唯⼀性编码。
C. 在格雷码中,最⼤数和最⼩数只有⼀位二进制数不同。D. 格雷码是⼀种可靠性编码。

11、有关下图的二叉树,说法正确的是( )。
在这里插入图片描述

A. 既是完全二叉树也是满二叉树。
B. 既是二叉搜索树也是平衡二叉树。
C. ⾮平衡二叉树。
D. 以上说法都不正确。

12、个节点的二叉搜索树,其查找的平均时间复杂度为( )。

A. O(1)
B. O(N)
C. O(log N)
D. O(N^2)

13、青蛙每次能跳 1 或 2 步。下面是青蛙跳到第 N 步台阶C++实现代码。该段代码采用的算法是( )。

int jumpFrog(int N){if (N <= 3)return N;return jumpFrog(N - 1) + jumpFrog(N - 2);
}
A. 递推算法
B. 贪⼼算法
C. 动态规划算法
D. 分治算法

14、N 个节点的双向循环链,在其中查找某个节点的平均时间复杂度是( )。

A. O(1)
B. O(N)
C. O(log N)
D. O(N^2)

15、关于 C++语⾔,以下说法不正确的是( )。

A. 若对象被定义为常量,则它只能调⽤以 const 修饰的成员函数。
B. 所有的常量静态变量都只能在类外进⾏初始化。
C. 若类 A 的对象 a 是类 B 的静态成员变量,则 a 在main() 函数调⽤之前应被初始化。
D. 静态全局对象、常量全局对象都是在 main 函数调用之前完成初始化,执⾏完 main 函数后被析构。

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

1、TCP/IP 的传输层的两个不同的协议分别是 UDP 和 TCP。

2、5G⽹络中,5G 中的 G 表⽰Gigabytes/s,其中 1 GB = 1024 MB。

3、在面向对象中,类是对象的实例。

4、在 C++类的定义中,使⽤ static 修饰符定义的静态成员被该类的所有对象共享。

5、在 C++类的定义中,可以定义初始化函数或运算符函数等。

6、DFS 是深度优先算法的英⽂简写。

7、哈夫曼编码是⼀种有损压缩算法。

8、有些算法或数据结构在 C/C++语⾔中使⽤指针实现,⼀个典型的例⼦就是链表。因此,链表这⼀数据结构在 C/C++语⾔中只能使⽤指针来实现。

9、如果节点数为 N ,⼴度搜索算法的最差时间复杂度为O(N)。

10、二叉搜索树的左右⼦树也是二叉搜索树。

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

小杨买饮料

【问题描述】
⼩杨来到了⼀家商店,打算购买⼀些饮料。这家商店总共出售N 种饮料,编号从 0⾄N-1,其中编号为 i 的饮料售价 ci 元,容量 li 毫升。⼩杨的需求有如下⼏点:
1、⼩杨想要尽可能尝试不同种类的饮料,因此他希望每种饮料至多购买1 瓶;
2、⼩杨很渴,所以他想要购买总容量不低于 L 的饮料;
3、⼩杨勤俭节约,所以在 1 和 2 的前提下,他希望使用尽可能少的费用。⽅便起见,你只需要输出最少花费的费用即可。特别地,如果不能满⾜⼩杨的要求,则输出 no solution.
【输入描述】
第⼀⾏两个整数 N, L。
接下来 N ⾏,依次描述第 i= 0,1,…,N-1 种饮料:每⾏两个整数ci , li 。
【输出描述】
输出⼀⾏⼀个整数,表⽰最少需要花费多少钱,才能满足⼩杨的要求。特别地,如果不能满足要求,则输出 no solution 。
【特别提醒】
在常规程序中,输⼊、输出时提供提⽰是好习惯。但在本场考试中,由于系统限定,请不要在输⼊、输出中附带任何提⽰信息。
【样例输入 1】
5 100
100 2000
2 50
4 40
5 30
3 20
【样例输出 1】
9
【样例解释 1】
小杨可以购买 1,2,4 号饮料,总计获得 50+40+20=110 毫升饮料,花费2+4+3=9元。
如果只考虑前两项需求,小杨也可以购买 1,3,4 号饮料,它们的容量总和为50+30+20=100 毫升,恰好可以满足需求。但遗憾的是,这个方案需要花费2+5+3=10 元。
【样例输入 2】
5 141
100 2000
2 50
4 40
5 30
3 20
【样例输出 2】
100
【样例解释 2】
1,2,3,4 号饮料总计 140 毫升,如每种饮料至多购买1 瓶,则恰好无法满足需求,因此只能花费 100 元购买 0 号饮料。
【样例输出 3】
4 141
2 50
4 40
5 30
3 20
【样例解释 3】
no solution
【数据规模】
对于 40% 的测试点,保证 N ≤ 20;1 ≤ L ≤100;li ≤ 100。
对于 70% 的测试点,保证 li ≤ 100。
对于所有测试点,保证 1≤ N ≤ 500;1 ≤ L ≤ 2000;1 ≤ ci, li ≤ 106

小杨的握手问题

【问题描述】
小杨的班级里共有 N 名同学,学号从 0 至 N-1。
某节课上,老师安排全班同学进行一次握手游戏,具体规则如下:老师安排了一个顺序,让全班 N 名同学依次进入教室。每位同学进入教室时,需要和已经在教室内且学号小于自己的同学握手。
现在,小杨想知道,整个班级总共会进行多少次握手。
【提示】
可以考虑使用归并排序进行降序排序,并在此过程中求解。
【输入描述】
输入包含 2 行。第一行一个整数 N,表示同学的个数;第二行N 个用单个空格隔开的整数,依次描述同学们进入教室的顺序,每个整数在0~N-1 之间,表示该同学的学号。
保证每位同学会且只会进入教室一次。
【输出描述】
输出一行一个整数,表示全班握手的总次数。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
【样例输入 1】
4
2 1 3 0
【样例输出 1】
2
【样例解释 1】
2 号同学进入教室,此时教室里没有其他同学。
1 号同学进入教室,此时教室里有 2 号同学。1 号同学的学号小于2 号同学,因此他们之间不需要握手。
3 号同学进入教室,此时教室里有 1,2 号同学。3 号同学的学号比他们都大,因此 3 号同学需要分别和另外两位同学握手。
0 号同学进入教室,此时教室里有 1,2,3 号同学。0 号同学的学号比他们都小,因此 0 号同学不需要与其他同学握手。
综上所述全班一共握手 0+0+2+0=2 次。
【样例输入 2】
6
0 1 2 3 4 5
【样例输出 2】
15
【样例解释 2】
全班所有同学之间都会进行握手,因为每位同学来到教室时,都会发现他的学号是当前教室里最大的,所以他需要和教室里的每位其他同学进行握手。
【数据规模】
对于 30% 的测试点,保证 N ≤ 100。
对于所有测试点,保证 2 ≤ N ≤ 3 × 105

答案及解析

单选题

1、
【答案】A
【考纲知识点】 计算机基础
【解析】本题属于考察计算机基础知识。手写板是输入设备。

2、
【答案】D
【考纲知识点】 运算表达式和位运算
【解析】本题属于考察运算表达式和位运算知识。b 不等于0,a 是b 的3 倍。A选项中,a 右移 3 位,相当于除以 8;B 是取余运算;如果a=7,b=2,a/b 的结果也等于 3,因为是整型,C 选项也不正确;选 D。

3、
【答案】D
【考纲知识点】 计算机语言
【解析】本题属于考察计算机语言知识。C 是面向过程的设计语言。

4、
【答案】D
【考纲知识点】 类的定义
【解析】本题属于考察 C++类的知识。类中的数据成员的类型可以包含整型、浮点型、字符型、数组、指针和引用等,但不能是抽象类、自身等,故选D。A、B、C 都是基本知识。

5、
【答案】A
【考纲知识点】 类与对象
【解析】本题属于考察 C++类的知识。属于应该输出对象的成员,不能直接输出对象名。

6、
【答案】D
【考纲知识点】 C++类的知识
【解析】本题属于考察 C++类的知识。不同命名空间里可以存在相同函数。

7、
【答案】D
【考纲知识点】 C++类的知识
【解析】本题属于考察 C++类的知识。Push 和 pop 函数没有对数组范围做是否越界判断,因此需要增加异常处理。

8、
【答案】B
【考纲知识点】 C++类的知识
【解析】本题属于考察 C++类的知识。对象指向的数组大小是100,程序中push的元素小于 100,因此不会错误。

9、
【答案】B
【考纲知识点】 数据结构中的哈夫曼树
【解析】本题考察的知识点是数据结构中的哈夫曼,哈夫曼树左边的边权是用0来表示,右边的边权值是 1,通常是左 0 右 1。走到 D 是右左左右右,也就是10011,因此选项是 B。

10、
【答案】B
【考纲知识点】 计算机编码的知识
【解析】本题属于考察计算机编码的知识。格雷码的编码不是唯一的编码。任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码。所以不是唯一性编码。

11、
【答案】B
【考纲知识点】 数据结构中树的知识
【解析】本题属于考察数据结构中树的知识。是二叉树,左子树都小于根节点,右子树都大于根节点,是二叉搜索树。左右子树的层差小于等于1,是平衡二叉树。

12、
【答案】C
【考纲知识点】 数据结构中树的知识
【解析】本题属于考察数据结构中树的知识。二叉搜索树每次查找,数据规模平均会减半。

13、
【答案】C
【考纲知识点】
【解析】本题属于考察算法的知识。可以通过动态规划来完成求解完成跳台阶方法,故参考答案是 C。

14、
【答案】B
【考纲知识点】 数据结构中链表的知识
【解析】本题属于考察数据结构中链表的知识。链表查找数据需要遍历整个链表,平均时间复杂度是 B 选项。

15、
【答案】D,B
【考纲知识点】 C++中类的知识
【解析】本题属于考察 C++中类的知识。主要考查常量静态变量和全局变量的初始化。A 和 C 是基本要求。D 选项关注动态初始化时机,但基本类型的全局常量可以在编译时完成初始化设定,说法不准确,是可选答案。但B 的说法可以有如下特例。
class A{
const static int b=1;
};
考虑到考试情况,D 和 B 都算对。

判断题

1、
【答案】正确
【考纲知识点】 计算机网络的知识
【解析】本题是计算机网络的知识,传输层是这 2 个协议。

2、
【答案】错误
【考纲知识点】 计算机网络的知识
【解析】本题是计算机网络的知识,G 是 generation 的简写。

3、
【答案】错误
【考纲知识点】C++的知识
【解析】本题是 C++的知识,对象是类的实例。

4、
【答案】正确
【考纲知识点】 C++类的知识
【解析】本题是 C++类的知识,静态成员可以被该类所有对象访问。

5、
【答案】正确
【考纲知识点】 C++类的知识
【解析】本题是 C++类的知识,定义的内容可以是函数和运算符。

6、
【答案】正确
【考纲知识点】 C++算法的知识
【解析】本题是 C++算法的知识,dfs 是深度优先搜索的简写。

7、
【答案】错误
【考纲知识点】 C++数据结构的知识
【解析】本题是 C++数据结构的知识,有损压缩算法是一种用于压缩数字媒体数据的算法。

8、
【答案】错误
【考纲知识点】 C++数据结构的知识
【解析】本题是 C++数据结构的知识,链表可以用数组实现。

9、
【答案】正确
【考纲知识点】 C++数据结构的知识
【解析】本题是 C++数据结构的知识,广搜最差情况最后一个搜到目标。

10、
【答案】正确
【考纲知识点】 C++数据结构的知识
【解析】本题是 C++数据结构的知识,二叉搜索树的定义,左右子树必须也是符合二叉搜索树的特点。

编程题1

1、
【题目大意】
有 n 种饮料,每种饮料只能选 1 瓶,相当于有 n 瓶饮料,每种饮料只有两种状态:选或者不选,即 0 和 1。选择饮料的升数最高是 L 升,表示有上限。希望尽可能的少花钱,就是求满足条件的最小值。符合 01 背包的问题。
【考纲知识点】
基本运算、输入输出语句、循环、动态规划的知识。
【解题思路】
按题目要求定义好需要的变量,并实现输入;
输入 n 行,每行 2 个整数,分别表示饮料的零售价和升数;初始化边界,买 0 升饮料的费用肯定是 0,其他初始化为最大值;每种饮料都要参与判断,选还是不选,更新 L~0 需要的费用;最终求出 L 升饮料需要的费用。

#include <iostream>using namespace std;const int INF = 1000000000;
int cost[2001];
int main(){int N = 0, L = 0;cin >> N >> L;cost[0] = 0;for (int i = 1; i <= L; i++)cost[i] = INF;for (int i = 0; i < N; i++){int c = 0, l = 0;cin >> c >> l;for (int j = L; j >= 0; j--)cost[j] = min(cost[j], cost[max(j - 1, 0)] + c);}if (cost[L] == INF)cout << "no solution" << endl;elsecout << cost[L] << endl;return 0;
}

编程题2

2、
【题目大意】
有 n 个学生,假设第 i 个学生进入教师,找出前 1~i-1 个学生,哪些人的学号比自己小,小的需要握手,贡献值加 1。
【考纲知识点】
基本运算、输入输出语句、循环、归并排序的知识。
【解题思路】
按题目要求定义好需要的变量,并实现输入;
输入 n 个整数,每个数字分别和前面的数字进行比较,如果大于,贡献值加1。可以用双重循环模拟,找到答案;
因为数据范围是 300000,双重循环会超时。
归并排序可以求逆序对,逆序对是指:i<j,a[i]>a[j];本题相当于“顺序对”,i>j,a[i]>a[j],同样可以用归并排序求得,时间复杂度是O(Nlogn)。写归并排序,在排序的过程中,统计数量,求和可得结果。

#include <iostream>using namespace std;int num[300000];
int tmp[300000];long long merge(int l, int r){if (l + 1 == r)return 0;int m = (l + r) / 2;long long res = merge(l, m) + merge(m, r);for (int i = l, j = m, k = l; k < r; k++){if (j == r || (i < m && num[i] > num[j])){tmp[k] = num[i];i++;}else{tmp[k] = num[j];j++;res += m - i;}}for (int k = l; k < r; k++)num[k] = tmp[k];return res;
}
int main(){int n = 0;cin >> n;for (int i = 0; i < n; i++)cin >> num[i];cout << merge(0, n) << endl; return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uml用例图是什么?有哪些要素?

UML用例图是什么&#xff1f; UML用例图&#xff08;Unified Modeling Language Use Case Diagram&#xff09;是一种用于描述系统功能和用户之间交互的图形化建模工具。它是UML的一部分&#xff0c;主要用于识别和表示系统中的各个用例&#xff08;用户需求或功能点&#…

(JAVA)-创建多线程的方式

1.继承Thread类 1.创建一个继承字Thread类的子类 2.重写Thread类的run方法 public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 100; i) {System.out.println(getName()"hello");}} }3.创建Thread类的子类对象 4.通过子类对象调…

JRT打印元素绘制协议整合PDF

打印不光要能打印内部的单据&#xff0c;对于检验的打印还有外送回传的PDF报告也需要能够打印&#xff0c;所以需要把打印PDF文件整合进来&#xff0c;为此给打印元素绘制协议增加PDF类型的元素。 定义如下&#xff0c;由绘制协议按地址下载文件后和其他打印元素整合&#xff…

Linux下c语言实现动态库的动态调用

在Linux操作系统下&#xff0c;有时候需要在不重新编译程序的情况下&#xff0c;运行时动态地加载库&#xff0c;这时可以通过Linux操作系统提供的API可以实现&#xff0c;涉及到的API主要有dlopen、dlsym和dlclose。使用时&#xff0c;需要加上头文件#include <dlfcn.h>…

软件测试岗位的简历怎么写?项目怎么包装

已经帮大家打包好了包装好的简历模板&#xff0c;大家可以直接进行套用&#xff0c;详情请望下看 自动化测试相关教程推荐&#xff1a; 2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂&#xff01;&#xff01;_哔哩哔哩_bili…

Linux——apt-get工具

apt-get是Debian和Ubuntu等基于Debian的Linux发行版的包管理工具&#xff0c;用于自动从互联网软件仓库中搜索、下载、安装、升级、卸载软件或操作系统&#xff0c;以及自动处理依赖关系。 使用apt-get进行软件包安装的基本步骤 &#xff08;请注意&#xff0c;具体的命令和操…

查询后矩阵的和

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 问题描述 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries &#xff0c;其中 queries[i] [t…

翻译: LLMs离通用人工智能AGI有多远 20个小时学会开车 Artificial General Intelligence

AGI&#xff0c;即人工通用智能&#xff0c;是一个令人兴奋的概念。我认为围绕它的一些混淆源于“通用”这个词的使用。正如您所知&#xff0c;人工智能是一种通用技术&#xff0c;意味着它对许多不同的事情都有用。大型语言模型的崛起导致了像ChatGPT这样的单一模型可以用于许…

超详细 | 黏菌算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F15 在MATLAB中执行程序结果如下&#xff1a; 在Python中执行程序结果如下&#xff1a; 众所周知&#xff0c;麻雀搜索算法SSA是2020年由东华大学沈波教授团队提出[1]的一种性能十分优异的优化算法&#xff0c;而最近作者发现&#xff0c;在2020年还提出了一个优…

【计算机四级(网络工程师)笔记】操作系统概论

目录 一、OS的概念 1.1OS的定义 1.2OS的特征 1.2.1并发性 1.2.2共享性 1.2.3随机性 1.3研究OS的观点 1.3.1软件的观点 1.3.2资源管理器的观点 1.3.3进程的观点 1.3.4虚拟机的观点 1.3.5服务提供者的观点 二、OS的分类 2.1批处理操作系统 2.2分时操作系统 2.3实时操作系统 2.4嵌…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式&#xff0c;或者EPIC Games Loader&#xff0c;启动虚幻引擎。 启动完成后&#xff0c;会打开项目管理的界面&#xff0c;可以看…

cpp_04_类_对象_this指针_常对象_常(成员)函数

1 类 1.1 类的定义 类的作用是抽象事物&#xff08;抽取事物特征&#xff09;的规则。 类的外化表现是用户自定义的复合数据类型&#xff08;包括成员变量、成员函数&#xff09;&#xff1a; 成员变量用于表达事物的属性&#xff0c;成员函数用于表达事物的行为。 类的表现…