【202609】C++五级

从PDF导入:【202609】C++五级

C++ 120分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
小杨用单链表保存任务序列,并同时维护头指针 head 和尾指针 tail。在链表非空且已知 tail 的情况下,在表尾插入新结点的时间复杂度是(  )。

A. O(1)
B. O(log n)
C. O(n)
D. O(n log n)
第2题 中级 2.0分 单选
在不带哨兵结点的双向链表中,结点 p 既不是头结点也不是尾结点。删除 p 的正确代码是(  )。

A.
B.
C.
D.
第3题 中级 2.0分 单选
下面函数使用快慢指针查找单链表的中间结点。横线处应填写(  )。

A. fast = fast->next;
B. fast = fast->next->next;
C. fast = slow->next;
D. fast = head->next;
第4题 中级 2.0分 单选
函数 gcd(int a, int b) 定义如下,则 gcd(105, 45) 的结果是(  )。

A. 3
B. 5
C. 15
D. 45
第5题 中级 2.0分 单选
下面函数用于判断正整数 n 是否为质数。横线处的最佳写法是(  )。

A. i < n
B. i <= n / 2
C. i * i < n
D. (long long) i * i <= n
第6题 中级 2.0分 单选
下面代码实现线性筛法。为了保证每个合数只被其最小质因子筛去一次,横线处应填写(  )。

A. p % i == 0
B. i % p == 0
C. i == p
D. i * p == n
第7题 中级 2.0分 单选
根据唯一分解定理,整数 756 的正确质因数分解是(  )。
A. 2² × 3³ × 7
B. 2³ × 3³ × 7
C. 2² × 3³ × 21
D. 2 × 3³ × 14
第8题 中级 2.0分 单选
函数 f(int n) 定义如下,则 f(4) 的结果是(  )。

A. 4
B. 7
C. 9
D. 10
第9题 中级 2.0分 单选
在升序数组中查找第一个严格大于 x 的元素位置,下面代码中的横线处填写(  )。

A. a[mid] < x
B. a[mid] >= x
C. a[mid] <= x
D. a[mid] > x
第10题 中级 2.0分 单选
小杨需要把若干箱货物按顺序分配到 days 天中,每天运输连续的若干箱,求能够完成任务的最小载重量。函数 check(cap) 判断载重量为 cap 时能否在规定天数内运完。横线处应填写(  )。

A. l = mid + 1; 和 r = mid;
B. r = mid; 和 l = mid + 1;
C. r = mid - 1; 和 l = mid;
D. l = mid; 和 r = mid - 1;
第11题 中级 2.0分 单选
下面是归并排序中合并两个有序区间(升序排序)的部分代码。若希望排序保持稳定,横线处应填写(  )。

A. a[i] < a[j]
B. a[i] > a[j]
C. a[i] >= a[j]
D. a[i] <= a[j]
第12题 中级 2.0分 单选
下面快速排序的划分函数以 a[right] 为枢轴,并把不大于枢轴的元素移动到左侧。横线处应填写(  )。

A. a[j] <= pivot
B. a[j] > pivot
C. a[i] <= pivot
D. a[right] < a[j]
第13题 中级 2.0分 单选
小杨要在一个教室安排尽可能多场活动,每场活动具有开始时间 start 和结束时间 end。采用贪心算法时,正确的选择策略是(  )。

A. 每次选择开始时间最早的活动
B. 每次选择持续时间最短的活动
C. 每次选择参与人数最少的活动
D. 按结束时间从早到晚排序,依次选择与已选活动不冲突的活动
第14题 中级 2.0分 单选
下面函数使用迭代方法求最大连续子段和。对于数组 {-2, 3, -1, 5, -6, 2},函数返回值是(  )。

A. 5
B. 6
C. 7
D. 8
第15题 中级 2.0分 单选
数组 a 和 b 按低位在前的顺序保存两个非负整数。下面代码实现高精度加法,横线处应填写(  )。

A. carry = sum % 10;
B. carry = sum;
C. carry = sum / 10;
D. carry = c[i] / 10;
第16题 中级 2.0分 判断
下面代码在已知结点 p 的情况下,能够以 O(1) 的时间在单链表的 p 结点之后插入新结点 s。

T. 正确
F. 错误
第17题 中级 2.0分 判断
下面代码可以安全地删除单链表的头结点,并使 head 指向删除后的新头结点。

T. 正确
F. 错误
第18题 中级 2.0分 判断
下面欧几里得算法既适用于 a > b,也适用于 a < b,只要 a、b 是正整数。

T. 正确
F. 错误
第19题 中级 2.0分 判断
下面埃氏筛从 i i 开始标记,是因为 i i 之前的 i 的合数倍数已经被更小的质因子标记过。

T. 正确
F. 错误
第20题 中级 2.0分 判断
下面程序的时间复杂度为 O(n)。

T. 正确
F. 错误
第21题 中级 2.0分 判断
若数组 a 已按升序排列,下面函数能够返回最后一个小于等于 x 的元素下标;如果不存在,则返回 -1 。

T. 正确
F. 错误
第22题 中级 2.0分 判断
快速排序中如果选取区间第一个元素作为枢轴。当输入数组已经升序排列时,其最坏时间复杂度仍为 O(n log n)。
T. 正确
F. 错误
第23题 中级 2.0分 判断
归并排序的递推式为 T(n) = 2T(n/2) + O(n),对应的时间复杂度为 O(n log n)。

T. 正确
F. 错误
第24题 中级 2.0分 判断
下面的贪心代码一定能对任意硬币面值集合 coins 求出 money 所需的最少硬币数。
T. 正确
F. 错误
第25题 中级 2.0分 判断
假设两个非负高精度数分别存储在数组 a 和 b 中,且 a ≥ b。数组采用低位在前的方式存储,即 a[0] 表示个位。下面代码中的 c 可以正确保存 a - b 的各位数字。

T. 正确
F. 错误
第26题 中级 25.0分 编程
哥德巴赫猜想

试题名称:哥德巴赫猜想
时间限制:1.0 s
内存限制:512.0 MB
众所周知,哥德巴赫猜想是说,任何大于 2 的偶数都能写成两个质数(素数)之和。例如:
4 = 2 + 2
6 = 3 + 3
8 = 3 + 5
10 = 3 + 7 = 5 + 5
聪明的你肯定想知道,对于大于 2 的偶数 n,它有多少种写成两个质数之和的方法。例如 4、6 和 8 都只有一种方法,10 有两种方法。请你编写程序计算这个问题的答案。
在本题中,我们认为两种方案不同,当且仅当两种质数分解方案包含的素数互不相同;即 10 = 3 + 7 和 10 = 7 + 3 是同一种方案,不能重复计数。
对于 40% 的测试点,保证 4 ≤ n ≤ 100。

【输入格式】
一行,一个大于 2 的偶数 n。
【输出格式】
一行,一个整数,表示将 n 写成两个质数之和的方法数。
【输入样例 1】
4
【输出样例 1】
1
【输入样例 2】
10
【输出样例 2】
2
【数据范围】
对于 40% 的测试点,保证 4 ≤ n ≤ 100。
对于所有测试点,保证 4 ≤ n ≤ 10⁶。
第27题 中级 25.0分 编程
饮品调制

试题名称:饮品调制
时间限制:1.0 s
内存限制:512.0 MB
你想调制一份甜度恰到好处的饮品给你的朋友们品尝。
有 n 种原料可用于调制饮品。第 i 种原料存量 vᵢ 升,每升含有的糖分 sᵢ 克。你可以自由选择原料加入饮品,但每种原料的使用量不得超过其剩余存量。也就是说,假设第 i 种原料选用 kᵢ 升,应当有 0 ≤ kᵢ ≤ vᵢ,kᵢ 可以取 0 到 vᵢ 之间的任何数字(包括小数)。
一份甜度恰到好处的饮品需要保证甜度恰好为 t。最终你调制得到的饮品甜度将为 Σkᵢsᵢ / Σkᵢ。为了让更多的朋友喝到饮品,请问最多能调制出多少升甜度恰到好处的饮品?如果无法调制出甜度恰到好处的饮品,则认为答案是 0。
对于 40% 的测试点,保证 n = 2。
对于所有测试点,保证 1 ≤ n ≤ 2000,0 ≤ t ≤ 200,1 ≤ vᵢ ≤ 100,0 ≤ sᵢ ≤ 200。

【输入格式】
第一行,两个整数 n, t,分别表示原料种类数量、恰到好处的甜度。
接下来 n 行,每行两个整数 vᵢ, sᵢ,分别表示第 i 种原料的存量体积、每升含有的糖分质量。
【输出格式】
一行,一个小数,表示能调制出的甜度恰到好处的饮品最大体积,保留三位小数。
【输入样例 1】
4 2
6 1
5 2
8 5
1 0
【输出样例 1】
14.667
【输入样例 2】
2 5
3 4
5 3
【输出样例 2】
0.000
【数据范围】
对于 40% 的测试点,保证 n = 2。
对于所有测试点,保证 1 ≤ n ≤ 2000,0 ≤ t ≤ 200,1 ≤ vᵢ ≤ 100,0 ≤ sᵢ ≤ 200。
💬