5318:[GESP202506八级] 客观题

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:文本裁判
金币值:
命题人:
提交:0 解决:0

题目描述

## 一、单选题(每题 2 分,共 30 分) **第 1 题** 一间的机房要安排 $6$ 名同学进行上机考试,座位共 $2$ 行 $3$ 列。考虑到在座位上很容易看到同一行的左右两侧的屏幕,安排中间一列的同学做 $A$ 卷,左右两列的同学做 $B$ 卷。请问共有多少种排座位的方案?() - $720$ - $90$ - $48$ - $15$ **第 2 题** 又到了毕业季,学长学姐们都在开心地拍毕业照。现在有 $3$ 位学长、$3$ 位学姐希望排成一排拍照,要求男生不相邻、女生不相邻。请问共有多少种拍照方案?() - $720$ - $72$ - $36$ - $2$ **第 3 题** 下列关于 `C++` 类和对象的说法,错误的是() - 通过语句 `const int x = 5;` 定义了一个对象 $x$。 - 通过语句 `std::string t = "12345";` 定义了一个对象 $t$。 - 通过语句 `void (*fp)() = NULL;` 定义了一个对象 $fp$。 - 通过语句 `class MyClass;` 定义了一个类 $MyClass$。 **第 4 题** 关于生成树的说法,错误的是() - 一个无向连通图,一定有生成树。 - $n$ 个顶点的无向图,其生成树要么不存在,要么一定包含 $n-1$ 条边。 - $n$ 个顶点、$n-1$ 条边的无向图,不可能有多颗生成树。 - $n$ 个顶点、$n-1$ 条边的无向图,它本身就是自己的生成树。 **第 5 题** 一对夫妻生男生女的概率相同。这对夫妻希望儿女双全。请问这对夫妻生下两个孩子时,实现儿女双全的概率是多少?() - $\frac{2}{3}$ - $\frac{1}{3}$ - $\frac{1}{2}$ - $\frac{1}{4}$ **第 6 题** 已定义变量 `double a, b;`,下列哪个表达式可以用来判断一元二次方程 $x^2 + ax + b = 0$ 是否有实根?() - `4 * b - a * a < 0` - `4 * b <= a * a` - `a * a - 4 * b` - `b * 4 - a * a` **第 7 题** $n$ 个结点的二叉树,执行广度优先搜索的平均时间复杂度是() - $O(logn)$ - $O(nlogn)$ - $O(n)$ - $O(2^n)$ **第 8 题** 以下关于动态规划的说法中,错误的是() - 动态规划方法通常能够列出递推公式。 - 动态规划方法的时间复杂度通常为状态的个数。 - 动态规划方法有递推和递归两种实现形式。 - 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。 **第 9 题** 下面的 `sum_digit` 函数试图求出从 $1$ 到 $n$ (包含 $1$ 和 $n$) 的数中,包含数字 $d$ 的个数。该函数的时间复杂度为() ```cpp 01 #include 02 int count_digit(int n, char d) { 03 int cnt = 0; 04 std::string s = std::to_string(n); 05 for (int i = 0; i < s.length(); i++) 06 if (s[i] == d) 07 cnt++; 08 return cnt; 09 } 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 } ``` - $O(nlogn)$ - $O(n)$ - $O(logn)$ - $O(n^2)$ **第 10 题** 下面程序的输出为() ```cpp 01 #include 02 const int N = 10; 03 int ch[N][N][N]; 04 int main() { 05 for (int x = 0; x < N; x++) 06 for (int y = 0; y < N; y++) 07 for (int z = 0; z < N; z++) 08 if (x == 0 && y == 0 && z == 0) 09 ch[x][y][z] = 1; 10 else { 11 if (x > 0) 12 ch[x][y][z] += ch[x - 1][y][z]; 13 if (y > 0) 14 ch[x][y][z] += ch[x][y - 1][z]; 15 if (z > 0) 16 ch[x][y][z] += ch[x][y][z - 1]; 17 } 18 std::cout << ch[1][2][3] << std::endl; 19 return 0; 20 } ``` - $60$ - $20$ - $15$ - $10$ **第 11 题** 下面 `count_triple` 函数的时间复杂度为() ```cpp 01 int gcd(int a, int b) { 02 if (a == 0) 03 return b; 04 return gcd(b % a, a); 05 } 06 int count_triple(int n) { 07 int cnt = 0; 08 for (int v = 1; v * v * 4 <= n; v++) 09 for (int u = v + 1; u * (u + v) * 2 <= n; u += 2) 10 if (gcd(u, v) == 1) { 11 int a = u * u - v * v; 12 int b = u * v * 2; 13 int c = u * u + v * v; 14 cnt += n / (a + b + c); 15 } 16 return cnt; 17 } ``` - $O(n)$ - $O(n^2)$ - $O(nlogn)$ - $O(n^2logn)$ **第 12 题** 下面 $quick_sort$ 函数试图实现快速排序算法,两处横线处分别应该填入的是() ```cpp 01 void swap(int & a, int & b) { 02 int temp = a; a = b; b = temp; 03 } 04 int partition(int a[], int l, int r) { 05 int pivot = a[l], i = l + 1, j = r; 06 while (i <= j) { 07 while (i <= j && a[j] >= pivot) 08 j--; 09 while (i <= j && a[i] <= pivot) 10 i++; 11 if (i < j) 12 swap(a[i], a[j]); 13 } 14 ________; // 在此处填入选项 15 return ________; // 在此处填入选项 16 } 17 void quick_sort(int a[], int l, int r) { 18 if (l < r) { 19 int pivot = partition(a, l, r); 20 quick_sort(a, l, pivot - 1); 21 quick_sort(a, pivot + 1, r); 22 } 23 } ``` - ```cpp 01 swap(a[l], a[i]) 02 i ``` - ```cpp 01 swap(a[l], a[j]) 02 i ``` - ```cpp 01 swap(a[l], a[i]) 02 j ``` - ```cpp 01 swap(a[l], a[j]) 02 j ``` **第 13 题** 下面 $LIS$ 函数试图求出最长上升子序列的长度,横线处应该填入的是() ```cpp 01 int max(int a, int b) { 02 return (a > b) ? a : b; 03 } 04 int LIS(vector & nums) { 05 int n = nums.size(); 06 if (n == 0) 07 return 0; 08 vector dp(n, 1); 09 int maxLen = 1; 10 for (int i = 1; i < n; i++) { 11 for (int j = 0; j < i; j++) 12 if (nums[j] < nums[i]) 13 ________; // 在此处填入选项 14 maxLen = max(maxLen, dp[i]); 15 } 16 return maxLen; 17 } ``` - `dp[j] = max(dp[j] + 1, dp[i])` - `dp[j] = max(dp[j], dp[i] + 1)` - `dp[i] = max(dp[i] + 1, dp[j])` - `dp[i] = max(dp[i], dp[j] + 1)` **第 14 题** 下面 $LIS$ 函数试图求出最长上升子序列的长度,其时间复杂度为() ```cpp 01 #define INT_MIN (-1000) 02 int LIS(vector & nums) { 03 int n = nums.size(); 04 vector tail; 05 tail.push_back(INT_MIN); 06 for (int i = 0; i < n; i++) { 07 int x = nums[i], l = 0, r = tail.size(); 08 while (l < r) { 09 int mid = (l + r) / 2; 10 if (tail[mid] < x) 11 l = mid + 1; 12 else 13 r = mid; 14 } 15 if (r == tail.size()) 16 tail.push_back(x); 17 else 18 tail[r] = x; 19 } 20 return tail.size() - 1; 21 } ``` - $O(logn)$ - $O(n)$ - $O(nlogn)$ - $O(n^2)$ **第 15 题** 下面的程序使用邻接矩阵表达的带权无向图,则从顶点 $0$ 到顶点 $3$ 的最短距离为() ```cpp 01 int weight[4][4] = { 02 { 0, 5, 8, 10}, 03 { 5, 0, 1, 7}, 04 { 8, 1, 0, 3}, 05 {10, 7, 3, 0}}; ``` - $9$ - $10$ - $11$ - $12$ ## 二、判断题(每题 2 分,共 20 分) **第 1 题** `C++` 语言中,表达式 `9 | 12` 的结果类型为 `int`、值为 $13$。 - 正确 - 错误 **第 2 题** `C++` 语言中,访问数据发生下标越界时,总是会产生运行时错误,从而使程序异常退出。 - 正确 - 错误 **第 3 题** 对 $n$ 个元素的数组进行归并排序,最差情况的时间复杂度为 $O(nlogn)$。 - 正确 - 错误 **第 4 题** $5$ 个相同的红球和 $4$ 个相同的蓝球排成一排,要求每个蓝球的两侧都必须至少有一个红球,则一共有 $15$ 种排列方案。 - 正确 - 错误 **第 5 题** 使用 `math.h` 或 `cmath` 头文件中的函数,表达式 $log(8)$ 的结果类型为 `double`、值约为 $3$。 - 正确 - 错误 **第 6 题** `C++` 是一种面向对象编程语言,$C$ 则不是。继承是面向对象三大特性之一,因此,使用 $C$ 语言无法实现继承。() - 正确 - 错误 **第 7 题** $n$ 个顶点的无向完全图,有 $n^{n-2}$ 棵生成树。 - 正确 - 错误 **第 8 题** 已知三个 $double$ 类型的变量 $a$、 $b$ 和 $theta$ 分别表示一个三角形的两条边长及二者的夹角 (弧度),则三角形的周长可以通过表达式 `sqrt(a * a + b * b - 2 * a * b * cos(theta))` 求得。 - 正确 - 错误 **第 9 题** 有 $V$ 个顶点、$E$ 条边的图的深度优先搜索遍历时间复杂度为 $O(V+E)$。 - 正确 - 错误 **第 10 题** 从 $32$ 名学生中选出 $4$ 人分别担任班长、副班长、学习委员和组织委员,老师要求班级综合成绩排名最后的 $4$ 名学生不得参选班长或学习委员 (仍可以参选副班长和组织委员),则共有 $P(30, 4)$ 种不同的选法。 - 正确 - 错误

来源/分类