#G2503C7A. [GESP202503 七级] 客观题
[GESP202503 七级] 客观题
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
- 下列哪个选项是C++中的关键字? {{ select(1) }}
- function
- class
- method
- object
- 下⾯代码输出的是( )
{{ select(2) }}
- 1
- 2
- 5
- 10
- 以下代码的输出是什么?
{{ select(3) }}
- 10
- 20
- 地址值
- 编译错误
- 下⾯代码输出的是( )
{{ select(4) }}
- 1
- 2
- 3
- 4
- 下列关于排序的说法,正确的是( )。 {{ select(5) }}
- 选择排序是最快的排序算法之⼀。
- 归并排序通常是稳定的。
- 最差情况, N 个元素做快速排序的时间复杂度为 。
- 最好情况, N 个元素做插⼊排序的时间复杂度为 。
- 下⾯关于 C++ 类构造和析构函数的说法,错误的是( )。 {{ select(6) }}
- 构造函数不能声明为虚函数。
- 析构函数必须声明为虚函数。
- 类的默认构造函数可以被声明为 private。
- 类的析构函数可以被声明为 private。
- 下列关于树和图的说法,错误的是( )。 {{ select(7) }}
- 树是⼀种有向⽆环图,但有向⽆环图不都是⼀棵树。
- 如果把树看做有向图,每个节点指向其⼦节点,则该图是强连通图。
- N 个顶点且连通的⽆向图,其最小⽣成树⼀定包含 N-1 条边。
- N+1 个顶点、N 条边的有向图,⼀定不是强连通的。
- 2025是个神奇的数字,因为它是由两个数20和25拼接而成,而且$2025 = (20 + 25)^2$。小杨决定写个程序找找小于$N$的正整数中共有多少这种神奇的数字。下面程序横线处应填入的是( )。
{{ select(8) }}
nl + nr == n
nl + nr == n2
(nl + nr) * (nl + nr) == n
(nl + nr) ^ 2 == n2
- 给定一个无向图,图的节点编号从$0$到$n-1$,图的边以邻接表的形式给出。下面的程序使用深度优先搜索 (DFS) 遍历该图,并输出遍历的节点顺序。横线处应该填入的是( )。
{{ select(9) }}
- 给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。
子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持有顺序的序列。
下面的程序横线处应该填入的是( )
{{ select(10) }}
dp[i] = max(dp[i], dp[j]);
dp[i] = max(dp[i+1], dp[j] + 1);
dp[i] = max(dp[i], dp[j] - 1);
dp[i] = max(dp[i], dp[j] + 1);
- 给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。
子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持有顺序的序列。
该程序的时间复杂度为( )
{{ select(11) }}
- 给定两个无向图 G1 和 G2,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关系一致。为了简化问题,假设图的节点编号从 0 到 n-1,并且图的边以邻接表的形式给出。下面程序中横线处应该给出的是( )
{{ select(12) }}
hash += to_string(neighbor);
hash += to_string(neighbors);
hash += to_string(neighbor) + ",";
hash -= to_string(neighbors);
- 给定一个的二维网格,每个格子中有一个非负整数。请找出一条从左上角到右下角的路径,使得路径上的数字总和最小。每次只能向右或向下移动。横线处应该填入的是( )。
{{ select(13) }}
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][1];
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
dp[i][j] = min(dp[i - 1][j], dp[i][j]) + grid[i][j];
dp[i][j] = min(dp[i][j], dp[i][j - 1]) + grid[i][j];
- 给定一个整数数组,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。下面横线处应该填入的是( )。
{{ select(14) }}
- dp[i] = max(nums[i+1], dp[i - 1] + nums[i]);
- dp[i] = max(nums[i], dp[i - 1] + nums[i]);
- dp[i] = max(nums[i], dp[i + 1] + nums[i]);
- dp[i] = max(nums[i], dp[i - 1] + nums[i+1]);
- 在哈希表的实现中,冲突解决是⼀个重要的问题。以下哪种⽅法 不是 常见的哈希表冲突解决策略? {{ select(15) }}
- 链地址法(Chaining)
- 开放地址法(Open Addressing)
- ⼆次哈希法(Double Hashing)
- ⼆分查找法(Binary Search)
二、判断题(共 10 题,每题 2 分,共计 20 分)
- 在 C++ 语法中,表达式 $1e6$、$1000000$ 和 $10^6$ 的值是相同的。 {{ select(16) }}
- 正确
- 错误
- 在 C++ 语⾔中,函数调⽤前必须有函数声明或定义。 {{ select(17) }}
- 正确
- 错误
- 快速排序⼀般是不稳定的。 {{ select(18) }}
- 正确
- 错误
- long long 类型能表达的数都能使⽤ double 类型精确表达。 {{ select(19) }}
- 正确
- 错误
- 使⽤ math.h 或 cmath 头⽂件中的函数,表达式 $\cos(60)$ 的结果类型为 double,值约为 0.5。 {{ select(20) }}
- 正确
- 错误
- ⼀颗 N 层的满⼆叉树,⼀定有 个结点。 {{ select(21) }}
- 正确
- 错误
- 邻接表和邻接矩阵都是图的存储形式。为了操作时间复杂度考虑,同⼀个图可以同时维护两种存储形式。 {{ select(22) }}
- 正确
- 错误
- ⼦类对象包含⽗类的所有成员(包括私有成员)。从⽗类继承的私有成员也是⼦类的成员,因此⼦类可以直接访问。 {{ select(23) }}
- 正确
- 错误
- 动态规划算法通常有递归实现和递推实现。但由于递归调⽤在运⾏时会由于层数过多导致程序崩溃,有些动态规划算法只能⽤递推实现。 {{ select(24) }}
- 正确
- 错误
- 根据下面的规则生成一棵二叉树:以一个人为根节点,其父亲为左子节点,母亲为右子节点。对其父亲、母亲分别用同样规则生成左子树和右子树。以此类推,记录30代的直系家谱,则这是一棵满二叉树。 {{ select(25) }}
- 正确
- 错误