【202609】Python五级

从PDF导入:【202609】Python五级

Python 180分钟 总分 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 = slow.next.next
第4题 中级 2.0分 单选
函数 gcd(a, 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. 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(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[j] <= 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_val % 10
B. carry = sum_val
C. carry = sum_val // 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 开始标记合数,原因是:ii 之前 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分 判断
下面归并排序的递推式对应的时间复杂度为 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 是同一种方案,不能重复计数。

【输入格式】
一行,一个大于 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。

【输入格式】
第一行,两个整数 n, t。分别表示原料种类数量,恰到好处的甜度。
接下来 n 行,每行两个整数 vᵢ, sᵢ,分别表示第 i 种原料的存量体积,每升含有的糖分质量。
【输出格式】
一行,一个小数,表示能调制出的甜度恰到好处的饮品最大体积,保留三位小数。
输入样例 1:<img src="/static/uploads/images/f2c187bc7eda.png" style="max-width:35%;border-radius:6px;margin:8px 0;" />
输出样例 1:<img src="/static/uploads/images/ec1b00578715.png" style="max-width:35%;border-radius:6px;margin:8px 0;" />
输入样例 2:<img src="/static/uploads/images/169b8d3415b1.png" style="max-width:35%;border-radius:6px;margin:8px 0;" />
输出样例 2:<img src="/static/uploads/images/69b94df6e99b.png" style="max-width:35%;border-radius:6px;margin:8px 0;" />

数据范围
对于 40% 的测试点,保证 n = 2。
对于所有测试点,保证 1 ≤ n ≤ 2000,0 ≤ t ≤ 200,1 ≤ vᵢ ≤ 100,0 ≤ sᵢ ≤ 200。
💬