#1339. 初赛模拟卷 B(5)

初赛模拟卷 B(5)

初赛模拟卷 B(5)

第 1 题(单选)

下面的代码片段用于计算斐波那契数列。该代码的时间复杂度是 ( ) ?

[]int fibonacci(int n) { if (n  b ? a : b; int small = a  get_prime_factors(int n) { vector factors;
while (n % 2 == 0) {
factors.push_back(2); n /= 2;
}
for (int i = 3; i * i  2) {
factors.push_back(n); }
return factors; }

{{ select(1) }}

  • O(n²)
  • O(nlog n) []
  • O(√n)
  • O(n)

第 2 题(单选)

用以下辗转相除法(欧几里得算法)求gcd(84, 60)的步骤中,第二步计算的数是()。 6 7 8

int gcd(int a, int b) {
int big = a > b ? a : b; int small = a & nums, int target) {
|
2 | int left = 0;
|
3 | int right = nums.size() - 1;
|
4 | while (left  b ? a : b; int small = a  get_prime_factors(int n) { vector factors;
while (n % 2 == 0) {
factors.push_back(2); n /= 2;
}
for (int i = 3; i * i  2) {
factors.push_back(n); }
return factors; }

{{ select(2) }}

  • O(n²)
  • O(nlog n) []
  • O(√n)
  • O(n)

第 3 题(单选)

关于欧几里得算法(辗转相除法),正确的有( )。

{{ select(3) }}

  • 用于求两个整数的最大公约数
  • 时间复杂度为O(log min(a, b))
  • 可以递归实现,也可以循环实现
  • 只能用于正整数,不能用于负数

第 4 题(单选)

关于高精度加法,下列说法正确的有( )。

{{ select(4) }}

  • 高精度加法需要按位相加并处理进位
  • 存储数字时通常采用倒序存储(个位在前)以便进位
  • 高精度加法的时间复杂度与两个数的位数之和成正比
  • 高精度加法不能处理负数

第 5 题(单选)

关于高精度减法,正确的有( )。

{{ select(5) }}

  • 需要借位处理
  • 通常要求被减数不小于减数,否则需要特殊处理符号
  • 结果前导零需要去除
  • 时间复杂度与两个数的位数之积成正比

第 6 题(单选)

关于埃拉托斯特尼筛法,正确的有( )。

{{ select(6) }}

  • 可以找出n以内的所有素数
  • 时间复杂度为O(n log log n)
  • 每个合数会被标记多次
  • 空间复杂度为O(n)

第 7 题(单选)

关于线性筛法,正确的有( )。

{{ select(7) }}

  • 每个合数只被标记一次
  • 时间复杂度为O(n)
  • 与埃氏筛法相比效率更高
  • 实现比埃氏筛法更复杂

第 8 题(单选)

关于递归算法,下列说法正确的有( )。

{{ select(8) }}

  • 递归算法必须有一个明确的终止条件,否则会导致无限递归
  • 递归算法的执行效率通常高于对应的迭代算法
  • 递归算法每次调用都会在栈上分配新的空间,可能引发栈溢出
  • 任何递归算法都可以用循环加栈的方式模拟实现

第 9 题(单选)

以下关于分治算法的描述,正确的有( )。

{{ select(9) }}

  • 分治算法将原问题分解为多个规模更小的子问题
  • 分治算法通常需要合并子问题的解
  • 二分查找是分治算法的一个典型应用
  • 所有分治算法的时间复杂度都是O(n log n)

第 10 题(单选)

以下关于贪心算法的说法,正确的有( )。

{{ select(10) }}

  • 贪心算法每一步选择当前最优解
  • 贪心算法一定能得到全局最优解
  • 贪心算法通常适用于具有最优子结构的问题
  • 贪心算法不一定能找到最优解

第 11 题(单选)

关于链表,下列说法正确的有( )。

{{ select(11) }}

  • 链表在头部插入元素的时间复杂度为O(1)
  • 链表支持随机访问
  • 双向链表可以方便地访问前驱和后继
  • 链表的存储空间可以是连续的,也可以是不连续的

第 12 题(单选)

关于数组和链表的比较,正确的有( )。

{{ select(12) }}

  • 数组大小固定,链表大小动态可调
  • 数组插入和删除操作效率通常低于链表
  • 数组支持随机访问,链表不支持
  • 存储相同数量的元素,数组占用的内存一定比链表少

第 13 题(单选)

下列关于链表说法,正确的是()。

{{ select(13) }}

  • 不能用数组来实现链表。
  • 在链表头部插入元素的时间复杂度是 O(1)O(1)
  • 循环链表使得任意一个结点都可以很方便地访问其前驱与后继。
  • 从双向链表的任意一个节点出发,并不一定能够访问到所有其他节点。

第 14 题(单选)

近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?()。

{{ select(14) }}

  • 输入
  • 输出
  • 控制
  • 记录

第 15 题(单选)

通讯卫星在通信网络系统中主要起到() 的作用。

{{ select(15) }}

  • 信息过滤
  • 信号中继
  • 避免攻击
  • 数据加密

第 16 题(单选)

小杨想编写一个判断任意输入的整数N是否为素数的程序,下面哪个方法不合适? ( )

{{ select(16) }}

  • 埃氏筛法
  • 线性筛法 []
  • 二分答案
  • 枚举法

第 17 题(单选)

贪心算法的核心思想是 ( ) ?

{{ select(17) }}

  • 在每一步选择中都做当前状态下的最优选择
  • 在每一步选择中都选择局部最优解
  • 在每一步选择中都选择全局最优解 []
  • 以上都对

第 18 题(单选)

辗转相除法也被称为()

{{ select(18) }}

  • 高斯消元法
  • 费马定理
  • 欧几里德算法
  • 牛顿迭代法

第 19 题(单选)

递归函数在调用自身时,必须满足(), 以避免无限递归?

{{ select(19) }}

  • 有终止条件
  • 函数参数递减(或递增)
  • 函数返回值固定
  • 以上都对

第 20 题(单选)

关于分治算法, 以下哪个说法正确?

{{ select(20) }}

  • 分治算法将问题分成子问题,然后分别解决子问题,最后合并结果。
  • 归并排序不是分治算法的应用。
  • 分治算法通常用于解决小规模问题。
  • 分治算法的时间复杂度不一定总是优于 O(n log n)。

第 21 题(单选)

给定如下递归函数,当 n = 7 时,函数返回值为( )。

int fun(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return fun(n - 2) - fun(n - 1); }

{{ select(21) }}

  • -11
  • 11
  • 7
  • 3

第 22 题(单选)

下面关于链表和数组的描述,错误的是()。

{{ select(22) }}

  • 数组大小固定,链表大小可动态调整。
  • 数组支持随机访问,链表只能顺序访问。
  • 存储相同数目的整数,数组比链表所需的内存多。
  • 数组插入和删除元素效率低,链表插入和删除元素效率高。