CCF-GESP 等级考试 2025年6月认证C++八级真题解析

2025年6月CCF-GESP C++八级真题解析

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

第1题一间的机房要安排6名同学进行上机考试,座位共2行3列。考虑到在座位上很容易看到同一行的左右两侧的 屏幕,安排中间一列的同学做A卷,左右两列的同学做B卷。请问共有多少种排座位的方案?(   )。

A. 720                                B. 90                                  C. 48                                   D. 15

解析:答案A座位如下图所示:坐②⑤的学生做A卷,坐①④③⑥的学生做B,由于没有指定哪些学生必须做A卷、哪些学生必须做B卷,所以这是个全排列,只要排到②⑤座位的学生就做A卷,其他学生做B卷。‌‌‌‌=6!=720。

也可以这么考虑:6名同学是不同的个体,即同学之间是可区分的。需要计算将6名不同的同学分配到6个座位上,满足题目试卷分配规则的所有可能的排列方式。为了计算满足条件的排列方式,可以按照以下步骤进行:A卷座位:座位②, 座位(共2个);B卷座位:座位①, 座位③, 座位④, 座位(共4个)。从6名同学中选出2名来做A卷,其余4名做B卷。选择A卷同学的方式有= 15 种。分配A卷同学到A卷座位:选出的2A卷同学可以分配到座位2和座位5,有 2! = 2 种排列方式(因为两个A卷同学是不同的,可以交换位置)。分配B卷同学到B卷座位:剩下的4B卷同学需要分配到4B卷座位有 4! = 24 种方式。总方案数 = 选择A卷同学的方式 × 分配A卷同学到座位的方式 × 分配B卷同学到座位的方式=×2!×4! = 15 × 2 × 24 = 720 种。故选A

第2题 又到了毕业季,学长学姐们都在开心地拍毕业照。现在有3位学长、3位学姐希望排成一排拍照,要求男生不相邻、女生不相邻。请问共有多少种拍照方案?(   )。

A. 720                                 B. 72                               C. 36                                     D. 2

解析:答案B3位学长、3位学姐排成一排拍照,要求男生不相邻、女生不相邻,只有如下图所示两种排法:

①“-----②“-----。排法3位学长在3位置上的排列有3! = 6种;3位学姐在3位置上的排列有3! = 6种。因此,该排法的排列数为 3! × 3! = 6 × 6 = 36 种。排法3位学长在3位置上的排列有3! = 6种;3位学姐在3位置上的排列有3! = 6种。因此,该排法的排列数为 3! × 3! = 6 × 6 = 36 种。合计72种。故选B

第3题 下列关于C++类和对象的说法,错误的是(   )。

A. 通过语句 const int x = 5; 定义了一个对象x。

B. 通过语句 std::string t = "12345"; 定义了一个对象t。

C. 通过语句 void (*fp)() = NULL; 定义了一个对象fp。

D. 通过语句 class MyClass; 定义了一个类MyClass。

解析:答案DA. const int x = 5; x 是一个常量对象(尽管是基本类型,但C++允许称其为对象),正确。B. std::string t = "12345"; t  std::string 类的实例,属于对象,正确。C. void (*fp)() = NULL; fp 是一个函数指针,在C++中,指针变量也被视为对象,正确。D. class MyClass; 该语句是前向声明forward declaration),仅声明类名,未定义类体,因此未完成类的定义,错误。故选D

第4题 关于生成树的说法,错误的是(   )。

A. 一个无向连通图,一定有生成树。

B. 𝑛个顶点的无向图,其生成树要么不存在,要么一定包含𝑛-1条边。

C. 𝑛个顶点、𝑛-1条边的无向图,不可能有多颗生成树。

D. 𝑛个顶点、𝑛-1条边的无向图,它本身就是自己的生成树。

解析:答案DA. 无向连通图必然存在生成树。因为生成树的定义要求包含所有顶点且无环,而连通图本身已满足顶点间路径连通性,通过删除环边即可得到生成树,正确。B. 生成树若存在,则必含n−1 条边。这是生成树的基本性质(连通无环的极小图)。C. n个顶点、n−1 条边的无向图若连通则必为树(唯一生成树),但若不连通则无生成树,因此不可能有多颗生成树,正确(最多一棵)。D. n个顶点、n−1 条边的无向图不一定是生成树。反例:当图不连通时(如一个三角形加一个孤立顶点,共4顶点3边),它不符合生成树的连通性要求,所以错误。故选D

第5题 一对夫妻生男生女的概率相同。这对夫妻希望儿女双全。请问这对夫妻生下两个孩子时,实现儿女双全的概率是多少?(   )。

A.                                     B.                                    C.                                    D.

解析:答案C。假设每次生育独立且生男生女概率均为50%,则两个孩子的性别组合共有4种等可能情况:男孩+男孩(概率25%),男孩+女孩(概率25%)、女孩+男孩(概率25%)、女孩+女孩(概率25%),题目条件是"儿女双全",即需至少一个男孩和一个女孩,符合条件的是+女“和+两种组合,总概率为25%+25%=50%,即。故选C

第6题 已定义变量 double a, b; 下列哪个表达式可以用来判断一元二次方程是否有实根?(   )。

A. 4 * b - a * a < 0               B. 4 * b <= a * a               C. a * a - 4 * b                    D. b * 4 - a * a

解析:答案B。一元二次方程的解为,有实根的条件是b²-4ac≥0。对本题方程,a=1b=ac=b,实根的条件a²-4b≥0,即a*a-4*b>=0,也就是a*a>=4*b4*b<=a*a。故选B

第7题 𝑛个结点的二叉树,执行广度优先搜索的平均时间复杂度是(   )。

A. O(log n)                            B. O(n log n)                     C. O(n)                                       D. O(2)

解析:答案C。广度优先搜索(BFS)会逐层访问所有节点,每个节点仅被访问一次,因此时间复杂度与节点数𝑛成正比。无论是平衡二叉树、普通二叉树还是退化的链表结构,BFS都需要遍历所有𝑛个节点,时间复杂度恒为O(n)‌A. O(log n)适用于平衡二叉搜索树的查找操作,不适用于BFS,错误。‌B. O(n log n)常见于排序算法,与BFS无关,错误。‌D. O(2)仅适用于满二叉树的节点总数计算(如𝑛层满二叉树有2−1个节点),与时间复杂度无关,错误。故选C

第8题 以下关于动态规划的说法中,错误的是(   )。

A. 动态规划方法通常能够列出递推公式。

B. 动态规划方法的时间复杂度通常为状态的个数。

C. 动态规划方法有递推和递归两种实现形式。

D. 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。

解析:答案B。动态规划的时间复杂度不仅取决于状态个数,还与状态转移的计算复杂度相关。例如,状态转移涉及多层循环时,时间复杂度可能是状态数的多项式倍数,所以B.错误。A.动态规划的核心是通过递推公式描述子问题与原问题的关系,正确。C.动态规划可通过递归(记忆化搜索)或递推(迭代)实现,正确。‌D.对于多数问题,两种实现的时间复杂度相同,但递归可能因函数调用产生额外开销,正确。故选C

第9题 下面的sum_digit函数试图求出从1到n(包含1和n)的数中,包含数字d的个数。该函数的时间复杂度为(   )。

  1. #include <string>
  2. int count_digit(int n, char d) {
  3.     int cnt = 0;
  4.     std::string s = std::to_string(n);
  5.     for (int i = 0; i < s.length(); i++)
  6.         if (s[i] == d)
  7.             cnt++;
  8.     return cnt;
  9. }
  10. int sum_digit(int n, char d) {
  11.     int sum = 0;
  12.     for (int i = 1; i <= n; i++)
  13.         sum += count_digit(i, d);
  14.    return sum;
  15. }

A. O(n log n)                       B. O(n)                             C. O(log n)                            D. O(n²)

解析:答案A。先分析count_digit函数的时间复杂度:将整数n转换为字符串的时间复杂度为O(log₁₀(n)),因为数字的位数与log₁₀(n)成正比,因为log(n)=log(n)/log(m)log₁₀(n)= log₂(n)/ log₂(10),因为log₂(10)为常数,O(log₁₀(n))O(log₂(n))相当,也与O(log(n))相当。遍历字符串的每个字符进行比较(n的位数为log₁₀n),时间复杂度为O(log n),因此count_digit函数的总时间复杂度为O(log n)‌sum_digit函数的时间复杂度:外层循环执行n次,每次调用count_digit函数,每次count_digit调用时间为O(log i),最坏情况下i=n时为O(log n),因此总时间复杂度为n × O(log n) = O(n log n)‌,所以该函数的时间复杂度为O(n log n)‌。这种复杂度属于线性对数阶,介于线性阶O(n)和平方阶O(n²)之间。故选A

第10题 下面程序的输出为(   )。

  1. #include <iostream>
  2. const int N = 10;
  3. int ch[N][N][N];
  4. int main() {
  5.     for (int x = 0; x < N; x++)
  6.         for (int y = 0; y < N; y++)
  7.      
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值