#G1078. 客观题
客观题
一、单选题(每题 2 分,共 30 分)
-
定义变量
double x
,如果下面代码输入为 ,输出最接近( )。#include <iostream> #include <string> #include <cmath> #include <vector> using namespace std; int main() { double x; cin >> x; cout << log10(x) - log2(x) << endl; return 0; }
{{ select(1) }}
-
对于下面动态规划方法实现的函数,以下选项中最适合表达其状态转移函数的为( )。
int s[MAX_N], f[MAX_N][MAX_N]; int stone_merge(int n, int a[]) { for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i]; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (i == j) f[i][j] = 0; else f[i][j] = MAX_F; for (int l = 1; l < n; l++) for (int i = 1; i <= n - l; i++) { int j = i + l; for (int k = i; k < j; k++) f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + s[j] - s[i - 1]); } return f[1][n]; }
{{ select(2) }}
- $f(i, j) = \min_{i \le k < j}(f(i,j), f(i,k)+f(k+1,j) + s(j) - s(i-1))$
- $f(i, j) = \min_{i \le k < j}(f(i,j), f(i,k)+f(k+1,j) + \sum_{k=i}^j a(k))$
- $f(i, j) = \min_{i \le k \le j}(f(i,k)+f(k+1,j) + \sum_{k=i}^{j+1} a(k))$
- $f(i, j) = \min_{i \le k < j}(f(i,k)+f(k+1,j)) + \sum_{k=i}^j a(k)$
-
下面代码可以用来求最长上升子序列()的长度,如果输入是:,则输出是( )。
int a[2023], f[2023]; int main() { int n, i, j, ans = -1; cin >> n; for (i = 1; i <= n; i++) { cin >> a[i]; f[i] = 1; } for (i = 1; i <= n; i++) for (j = 1; j < i; j++) if (a[j] < a[i]) f[i] = max(f[i], f[j] + 1); for (i = 1; i <= n; i++) { ans = max(ans, f[i]); cout << f[i] << " "; } cout << ans << endl; return 0; }
{{ select(3) }}
- ++ 语言中,下列关于关键字 的描述不正确的是( )。
{{ select(4) }}
- 可以修饰类的成员函数
- 常量静态成员可以在类外进行初始化
- 若 是类 常量静态成员,则 的地址都可以访问且唯一
- 静态全局对象一定在 函数调用前完成初始化,执行完 函数后被析构
- 是一个非连通无向图,共有 条边,则该图至少有( )个顶点。
{{ select(5) }}
-
哈希表长 ,按照下面的程序依次输入 ,则最后的 存入哪个位置?( )
#include <iostream> #include <string> #include <cmath> #include <vector> using namespace std; const int N = 31; int htab[N], flag[N]; int main() { int n, x, i, j, k; cin >> n; for (i = 0; i < n; i++) { cin >> x; k = x % 13; while (flag[k]) k = (k + 1) % 13; htab[k] = x; flag[k] = 1; } for (i = 0; i < N; i++) cout << htab[i] << " "; return 0; }
{{ select(6) }}
- 某二叉树 的先序遍历序列为:,中序遍历序列为:,则下列说法中正确的是( )。
{{ select(7) }}
- 的度为
- 的高为
- 有 个叶节点
- 以上说法都不对
-
下面代码段可以求两个字符串 和 的最长公共子串(),下列相关描述不正确的是( )。
while (cin >> s1 >> s2) { memset(dp, 0, sizeof(dp)); int n1 = strlen(s1), n2 = strlen(s2); for (int i = 1; i <= n1; ++i) for (int j = 1; j <= n2; ++j) if (s1[i - 1] == s2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); cout << dp[n1][n2] << endl; }
{{ select(8) }}
- 代码的时间复杂度为
- 代码的空间复杂度为
- 空间复杂度已经最优
- 采用了动态规划求解
- 图的广度优先搜索中既要维护一个标志数组标志已访问的图的结点,还需哪种结构存放结点以实现遍历?( )
{{ select(9) }}
- 双向栈
- 队列
- 哈希表
- 堆
-
对关键字序列 建立哈希表,哈希函数为 ,执行下面的 函数,则等概率情况下的平均成功查找长度(即查找成功时的关键字比较次数的均值)为( )。
#include <iostream> #include <string> #include <cmath> #include <vector> using namespace std; typedef struct Node { int data; struct Node *next; }Node; Node* hTab[7]; int key[] = {44, 36, 23, 35, 52, 73, 90, 58, 0}; void Insert() { int i, j; Node *x; for (i = 0; key[i]; i++) { j = key[i] % 7; x = new Node; x->data = key[i]; x->next = hTab[j]; hTab[j] = x; } return ; }
{{ select(10) }}
- 学生在读期间所上的某些课程中需要先上其他的课程,所有课程和课程间的先修关系构成一个有向图 ,有向边 表示课程 是课程 的先修课,则要找到某门课程 的全部先修课下面哪种方法不可行?( )
{{ select(11) }}
- 搜索
- 搜索
- +
- 动态规划
- 一棵完全二叉树有 个结点,则叶结点有多少个?( )
{{ select(12) }}
-
用下面的邻接表结构保存一个有向图 , 和 是定义好的类。设 有 个顶点、 条弧,则求图 中某个顶点 (其顶点序号为 )的度的算法复杂度是( )。
typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 InfoType *info; // 该弧相关信息的指针 } ArcNode; typedef struct VNode { VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph;
{{ select(13) }}
- 给定一个简单有向图 ,判断其中是否存在环路的下列说法哪个最准确?( )
{{ select(14) }}
- 更快
- 更快
- 和 一样快
- 不确定
-
从顶点 开始遍历下图 得到顶点访问序列,在下面所给的 个序列中符合广度优先的序列有几个?( )
{{ select(15) }}
二、判断题(每题 2 分,共 20 分)
-
小杨这学期准备参加 的 级考试,其中有关于三角函数的内容,他能够通过下面的代码找到结束循环的角度值。( )
int main() { double x; do { cin >> x; x = x / 180 * 3.14; } while (int(sin(x) * sin(x) + cos(x) * cos(x)) == 1); cout << "//" << sin(x) << " " << cos(x) << endl; return 0; }
{{ select(16) }}
- 正确
- 错误
-
小杨在开发画笔刷小程序(),操作之一是选中黄颜色,然后在下面的左图的中间区域双击后,就变成了右图。这个操作可以用图的泛洪算法来实现。( )
{{ select(17) }}
- 正确
- 错误
- 假设一棵完全二叉树共有 个节点,则树的深度为 。( )
{{ select(18) }}
- 正确
- 错误
- 给定一个数字序列 ,,,,,要求 和 (),使 最大,可以使用动态规划方法来求解。( )
{{ select(19) }}
- 正确
- 错误
- 若变量 为 类型正数,则
log(exp(x)) > log10(x)
。( )
{{ select(20) }}
- 正确
- 错误
- 简单有向图有 个顶点和 条弧,可以用邻接矩阵或邻接表来存储,二者求节点 的度的时间复杂度一样。( )
{{ select(21) }}
- 正确
- 错误
- 某个哈希表键值 为整数,为其定义哈希函数 ,则 选择素数时不会产生冲突。( )
{{ select(22) }}
- 正确
- 错误
- 动态规划只要推导出状态转移方程,就可以写出递归程序来求出最优解。( )
{{ select(23) }}
- 正确
- 错误
- 广度优先搜索()能够判断图是否连通。( )
{{ select(24) }}
- 正确
- 错误
- 在 ++ 中,如果定义了构造函数,则创建对象时先执行完缺省的构造函数,再执行这个定义的构造函数。( )
{{ select(25) }}
- 正确
- 错误