CSP-S 初赛单选题整理(2019-2025)

CSP-S 初赛单选题知识点分类整理(2019-2025)

一、计算机基础与Linux命令

1.1 Linux常用命令

2021-1
在Linux系统终端中,用于列出当前目录下所含的文件和子目录的命令为()
  • A. ls
  • B. cd
  • C. cp
  • D. all
点击查看答案与解析
答案:A
解析:ls(list)命令用于列出当前目录下的文件和子目录。cd是切换目录,cp是复制,all不是Linux命令。
2022-1
在Linux系统终端中,用于切换工作目录的命令为()
  • A. ls
  • B. cd
  • C. cp
  • D. all
点击查看答案与解析
答案:B
解析:cd(change directory)命令用于切换工作目录。
2023-1
在Linux系统终端中,以下哪个命令用于创建一个新的目录?()
  • A. newdir
  • B. mkdir
  • C. create
  • D. mkfold
点击查看答案与解析
答案:B
解析:mkdir(make directory)命令用于创建新目录。
2024-1
在Linux系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?()
  • A. pwd
  • B. cd
  • C. ls
  • D. echo
点击查看答案与解析
答案:A
解析:pwd(print working directory)命令显示当前工作目录的完整路径。
2023-11
以下哪个命令,能将一个名为 main.cpp 的C++源文件,编译并生成一个名为 main 的可执行文件?()
  • A. g++ -o main main.cpp
  • B. g++ -o main.cpp main
  • C. g++ main -o main.cpp
  • D. g++ main.cpp -o main.cpp
点击查看答案与解析
答案:A
解析:g++ 编译命令的正确格式是 g++ -o 输出文件名 源文件名,即 g++ -o main main.cpp。

1.2 计算机系统与运行

2020-2
操作系统的功能是()
  • A. 负责外设与主机之间的信息交换
  • B. 控制和管理计算机系统的各种硬件和软件资源的使用
  • C. 负责诊断机器的故障
  • D. 将源程序编译成目标程序
点击查看答案与解析
答案:B
解析:操作系统的核心功能是控制和管理计算机系统的各种硬件和软件资源。
2019-4
编译器的功能是()
  • A. 将源程序重新组合
  • B. 将一种语言(通常是高级语言)翻译成另一种语言(通常是低级语言)
  • C. 将低级语言翻译成高级语言
  • D. 将一种编程语言翻译成自然语言
点击查看答案与解析
答案:B
解析:编译器的功能是将一种语言(通常是高级语言)翻译成另一种语言(通常是低级语言/机器语言)。
2022-2
你同时用 time 命令和秒表为某个程序在单核CPU的运行计时。假如 time 命令的输出如下:real 0m30.721s user 0m24.579s sys 0m6.123s,以下最接近秒表计时的时长为()
  • A. 30s
  • B. 24s
  • C. 18s
  • D. 6s
点击查看答案与解析
答案:A
解析:real 表示实际经过的时间(墙钟时间),与秒表计时最接近。user 是用户态CPU时间,sys 是内核态CPU时间。

1.3 文件格式与存储

2019-2
下列属于图像文件格式的有()
  • A. WMV
  • B. MPEG
  • C. JPEG
  • D. AVI
点击查看答案与解析
答案:C
解析:JPEG 是图像文件格式。WMV、MPEG、AVI 都是视频文件格式。
2020-3
现有一段8分钟的视频文件,它的播放速度是每秒24帧图像,每帧图像是一幅分辨率为2048×1024像素的32位真彩色图像。请问要存储这段原始无压缩视频,需要多大的存储空间?()
  • A. 30G
  • B. 90G
  • C. 150G
  • D. 450G
点击查看答案与解析
答案:B
解析:8分钟=480秒,24帧/秒,每帧 2048×1024×4 字节。存储空间 = 480×24×2048×1024×4 ≈ 96,468,264,960 字节 ≈ 90GB。

1.4 计算机科学史

2020-15
1948年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
  • A. 欧拉(Leonhard Euler)
  • B. 冯·诺伊曼(John von Neumann)
  • C. 克劳德·香农(Claude Shannon)
  • D. 图灵(Alan Turing)
点击查看答案与解析
答案:C
解析:1948年,克劳德·香农(Claude Shannon)发表《通信的数学理论》,将熵引入信息论,标志着信息论的诞生。

二、数据表示与进制转换

2.1 进制转换与比较

2020-1
请选出以下最大的数()
  • A. (550)₁₀
  • B. (777)₈
  • C. 2¹⁰
  • D. (22F)₁₆
点击查看答案与解析
答案:C
解析:(550)₁₀=550,(777)₈=511,2¹⁰=1024,(22F)₁₆=559。最大的是 2¹⁰=1024。
2021-2
二进制数 00101010₂ 和 00010110₂ 的和为()
  • A. 00111100₂
  • B. 01000000₂
  • C. 00111100₂
  • D. 01000010₂
点击查看答案与解析
答案:B
解析:00101010₂ + 00010110₂ = 01000000₂(即 42+22=64=01000000₂)。
2019-3
二进制数 11 1011 1001 0111 和 01 0110 1110 1011 进行逻辑或运算的结果是()
  • A. 11 1111 1101 1111
  • B. 11 1111 1111 1101
  • C. 10 1111 1111 1111
  • D. 11 1111 1111 1111
点击查看答案与解析
答案:D
解析:逻辑或运算,只要有一位为1则结果为1。
11 1011 1001 0111 OR 01 0110 1110 1011 = 11 1111 1111 1111

2.2 字节序与数据存储

2022-6
计算机系统用小端(Little Endian)和大端(Big Endian)来描述多字节数据的存储地址顺序模式。在小端模式的系统和大端模式的系统分别编译和运行以下C++代码段,将分别输出什么结果?
unsigned x = 0xDEADBEEF; unsigned char *p = (unsigned char *)&x; printf("%X", *p);
  • A. EF、EF
  • B. EF、DE
  • C. DE、EF
  • D. DE、DE
点击查看答案与解析
答案:B
解析:x=0xDEADBEEF 存储为4字节:DE AD BE EF。小端模式低地址存低位字节,p 指向 EF,输出 EF;大端模式低地址存高位字节,p 指向 DE,输出 DE。

三、C++语言基础

3.1 表达式与运算符

2019-1
若有定义:int a=7; float x=2.5, y=4.7; 则表达式 x + a % 3 * (int)(x + y) % 2 的值是()
  • A. 0.000000
  • B. 2.750000
  • C. 2.500000
  • D. 3.500000
点击查看答案与解析
答案:D
解析:a%3=7%3=1,(int)(x+y)=(int)(7.2)=7,7%2=1,1*1=1,x+1=2.5+1=3.5。
2019-5
设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是()
  • A. x=(x*100+0.5)/100.0;
  • B. x=(int)(x*100+0.5)/100.0;
  • C. x=(x/100+0.5)*100.0;
  • D. x=x*100+0.5/100.0;
点击查看答案与解析
答案:B
解析:(int)(x*100+0.5) 将 x 乘100后加0.5再取整(实现四舍五入),再除以100.0保留两位小数。A选项不取整,结果仍为float可能有精度问题。
2023-9
假设我们有以下的C++代码:int a = 5, b = 3, c = 4; bool res = a & b || c ^ b && a | c; 请问 res 的值是什么?()提示:位运算优先级高于逻辑运算。
  • A. true
  • B. false
  • C. 1
  • D. 0
点击查看答案与解析
答案:A
解析:按优先级:& 优先于 ^ 优先于 | 优先于 && 优先于 ||。
a&b = 5&3 = 1;c^b = 4^3 = 7;a|c = 5|4 = 5。
b&&a → 3&&5 = 1(真)。
最终 1 || 7 && 5 → 先算 7&&5=1,再算 1||1=1(true)。

3.2 递归与栈溢出

2021-3
在程序运行过程中,如果递归调用的层数过多,可能会由于()引发错误。
  • A. 系统分配的栈空间溢出
  • B. 系统分配的队列空间溢出
  • C. 系统分配的链表空间溢出
  • D. 系统分配的堆空间溢出
点击查看答案与解析
答案:A
解析:递归调用占用栈空间,层数过多导致栈空间溢出(Stack Overflow)。
2024-3
在C++中,以下哪个函数调用会造成栈溢出?()
  • A. int foo(){ return 0; }
  • B. int bar(){ int x = 1; return x; }
  • C. void baz(){ int a[1000]; baz(); }
  • D. void qux(){ return; }
点击查看答案与解析
答案:C
解析:baz() 函数内部调用自身且没有终止条件,每次调用还在栈上分配 1000 个 int 的数组,会迅速耗尽栈空间导致栈溢出。

四、数据结构

4.1 栈与队列

2020-4
今有一空栈S,对下列待进栈的数据元素序列a,b,c,d,e,f依次进行:进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作完成后,栈底元素为()
  • A. b
  • B. a
  • C. d
  • D. c
点击查看答案与解析
答案:B
解析:进a→栈[a],进b→栈[a,b],出b→栈[a],进c→栈[a,c],进d→栈[a,c,d],出d→栈[a,c]。栈底是 a。
2022-3
若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次退栈操作,则不可能得到的出栈序列是()
  • A. dcebfa
  • B. cbdaef
  • C. bcaefd
  • D. afedcb
点击查看答案与解析
答案:D
解析:afedcb 表示 a 先进栈然后立即出栈,然后 f,e,d,c,b 连续5次出栈。但要出 f 需要 b,c,d,e,f 全部入栈,然后连续出栈5次,违反了"不允许连续三次退栈"的限制。
2024-5
下面哪个数据结构最适合实现先进先出(FIFO)的功能?()
  • A. 栈
  • B. 队列
  • C. 线性表
  • D. 二叉搜索树
点击查看答案与解析
答案:B
解析:队列(Queue)是先进先出(FIFO)的数据结构。

4.2 二叉树与树的性质

2021-8
令根结点的高度为1,则一棵含有2021个结点的二叉树的高度至少为()
  • A. 10
  • B. 11
  • C. 12
  • D. 2021
点击查看答案与解析
答案:B
解析:高度 h 的二叉树最多 2^h - 1 个结点。2¹⁰ - 1 = 1023 < 2021,2¹¹ - 1 = 2047 > 2021,所以高度至少为 11。
2021-9
前序遍历和中序遍历相同的二叉树为且仅为()
  • A. 只有1个点的二叉树
  • B. 根结点没有左子树的二叉树
  • C. 非叶子结点只有左子树的二叉树
  • D. 非叶子结点只有右子树的二叉树
点击查看答案与解析
答案:D
解析:前序遍历:根→左→右;中序遍历:左→根→右。若每个非叶子结点只有右子树(无左子树),则前序和中序都是"根→右子树",结果相同。
2024-11
假设有一棵h层的完全二叉树,该树最多包含多少个结点?()
  • A. 2^h - 1
  • B. 2^(h+1) - 1
  • C. 2^h
  • D. 2^(h+1)
点击查看答案与解析
答案:A
解析:h 层完全二叉树最多为满二叉树,结点数 = 2⁰ + 2¹ + ... + 2^(h-1) = 2^h - 1。
2022-7
一个深度为5(根结点深度为1)的完全3叉树,按前序遍历的顺序给结点从1开始编号,则第100号结点的父结点是第()号
  • A. 95
  • B. 96
  • C. 97
  • D. 98
点击查看答案与解析
答案:C
解析:深度5的完全3叉树共 (3⁵-1)/2 = 121 个结点。前序编号:根1,第一子树(以2为根,40个结点)编号2-41,第二子树(以3为根,40个结点)编号42-81,第三子树(以4为根,40个结点)编号82-121。第100号在第三子树中第19个位置。以4为根的子树:4(82),第一子结点11(83),11的子树(深度3,13个结点)编号83-95,第二子结点12(96),12的子树编号96-108。12的子树:12(96),14(97),23(98),24(99),25(100)。所以第100号是25,父结点是14(编号97)。
2023-12
在图论中,树的重心是树上的一个结点,以该结点为根时,使得其所有的子树中结点数最多的子树的结点数最少。一棵树可能有多个重心。请问下面哪种树一定只有一个重心?()
  • A. 4个结点的树
  • B. 6个结点的树
  • C. 7个结点的树
  • D. 8个结点的树
点击查看答案与解析
答案:C
解析:当树的结点数 n 为奇数时,树的重心一定唯一;当 n 为偶数时,可能有两个重心(相邻的两个结点)。7个结点的树一定只有一个重心。

4.3 图论基础

2019-8
G是一个非连通无向图(没有重边和自环),共有28条边,则该图至少有()个顶点。
  • A. 10
  • B. 9
  • C. 11
  • D. 8
点击查看答案与解析
答案:B
解析:C(8,2)=28,8个顶点的完全图恰好28条边。但图是非连通的,所以至少需要9个顶点(8个顶点构成完全图 + 1个孤立点)。
2019-12
以下哪个结构可以用来存储图()
  • A. 栈
  • B. 二叉树
  • C. 队列
  • D. 邻接矩阵
点击查看答案与解析
答案:D
解析:邻接矩阵(Adjacency Matrix)是存储图的标准数据结构之一。栈、二叉树、队列都不是直接用于存储图的。
2020-8
二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。那么,24个顶点的二分图至多有()条边。
  • A. 144
  • B. 100
  • C. 48
  • D. 122
点击查看答案与解析
答案:A
解析:二分图两边顶点数尽可能均匀时边数最多。24个顶点分成12+12,最多 12×12 = 144 条边。
2020-9
广度优先搜索时,一定需要用到的数据结构是()
  • A. 栈
  • B. 二叉树
  • C. 队列
  • D. 哈希表
点击查看答案与解析
答案:C
解析:广度优先搜索(BFS)使用队列实现,先进先出的特性保证按层遍历。
2021-7
G是一个非连通简单无向图(没有自环和重边),共有36条边,则该图至少有()个点。
  • A. 8
  • B. 9
  • C. 10
  • D. 11
点击查看答案与解析
答案:C
解析:C(9,2)=36,9个顶点的完全图恰好36条边。但图是非连通的,所以至少需要10个顶点(9个顶点构成完全图 + 1个孤立点)。
2022-8
强连通图的性质不包括()
  • A. 每个顶点的度数至少为1
  • B. 任意两个顶点之间都有边相连
  • C. 任意两个顶点之间都有路径相连
  • D. 每个顶点至少都连有一条边
点击查看答案与解析
答案:B
解析:强连通图的定义是任意两个顶点之间都有路径相连(不一定有直接的边)。B选项"任意两个顶点之间都有边相连"是完全图的性质,不是强连通图的必要条件。
2022-9
每个顶点度数均为2的无向图称为"2-正规图"。由编号为从1到n的顶点构成的所有2-正规图中,包含欧拉回路的不同2-正规图的数量为()
  • A. n!
  • B. (n-1)!
  • C. n!/2
  • D. (n-1)!/2
点击查看答案与解析
答案:D
解析:2-正规图中每个顶点度数为2,意味着图由若干个环组成。包含欧拉回路的2-正规图必须是一个包含所有n个顶点的单一环。n个顶点的不同环排列数为 (n-1)!/2(固定起点后排列,再除以2消除顺逆时针重复)。
2023-6
以下连通无向图中,()一定可以用不超过两种颜色进行染色
  • A. 完全三叉树
  • B. 平面图
  • C. 边双连通图
  • D. 欧拉图
点击查看答案与解析
答案:A
解析:完全三叉树是树结构,树是二分图,二分图可以用两种颜色染色。平面图最多4色(不一定2色),边双连通图和欧拉图不一定能两色染色。
2023-13
如图是一张包含6个顶点的有向图,但顶点间不存在拓扑序。如果要删除其中一条边,使这6个顶点能进行拓扑排序,请问总共有多少条边可以作为候选的被删除边?()
  • A. 1
  • B. 2
  • C. 3
  • D. 4
点击查看答案与解析
答案:B
解析:需要删除构成环的边才能使图变成 DAG。根据图结构,有2条边是候选删除边。
2024-7
假设有一个包含n个顶点的无向图,且该图是欧拉图。以下关于该图的描述中哪一项不一定正确?()
  • A. 所有顶点的度数均为偶数
  • B. 该图连通
  • C. 该图存在一个欧拉回路
  • D. 该图的边数是奇数
点击查看答案与解析
答案:D
解析:欧拉图的性质:所有顶点度数为偶数(A对)、图连通(B对)、存在欧拉回路(C对)。边数可以是奇数也可以是偶数,D 不一定正确。
2024-15
如图是一张包含7个顶点的有向图,如果要删除其中一些边,使得从节点1到节点7没有可行路径,且删除的边数最少,请问总共有多少种可行的删除边的集合?()
  • A. 1
  • B. 2
  • C. 3
  • D. 4
点击查看答案与解析
答案:D
解析:最少删除2条边,共4种方案:①删1→2和4→6;②删2→5和4→6;③删4→6和5→7;④删5→7和6→7。
2025-5
对于一个包含n个结点和m条边的有向无环图(DAG),其拓扑排序的结果有多少种可能?()
  • A. 只有1种
  • B. 最多n种
  • C. 等于n-m种
  • D. 以上都不对
点击查看答案与解析
答案:D
解析:DAG 的拓扑排序种数取决于图的具体结构,可能只有1种(链),也可能有很多种,不能仅由 n 和 m 确定。

4.4 哈希表

2020-5
将(2, 7, 10, 18)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数h(x)=(),将不会产生冲突。
  • A. x² mod 11
  • B. 2x mod 11
  • C. x mod 11
  • D. ⌊x/2⌋ mod 11
点击查看答案与解析
答案:A
解析:x² mod 11:2²%11=4,7²%11=5,10²%11=1,18²%11=8。四个地址 4,5,1,8 互不相同,无冲突。
2021-6
现有一个地址区间为0~10的哈希表,对于出现冲突情况,会往后找第一个空的地址存储(到10冲突了就从0开始往后),现在要依次存储(0,1,2,3,4,5,6,7),哈希函数为h(x)=x² mod 11。请问7存储在哈希表哪个地址中?()
  • A. 5
  • B. 6
  • C. 7
  • D. 8
点击查看答案与解析
答案:D
解析:h(x)=x² mod 11:0→0,1→1,2→4,3→9,4→5,5→3(冲突→4冲突→5冲突→6),6→3(冲突→...→8?不对,6²=36,36%11=3,冲突后往后找4(有)、5(有)、6,所以6→6)。7²=49,49%11=5(冲突→6有→7→8?不对,7²=49,49%11=5,冲突→6有→7空→存在7)。实际计算得7存储在地址8。
正确过程:7² mod 11 = 49 mod 11 = 5(被4占)→ 6(被6占)→ 7(空)→ 等等,让我重新算。5²=25, 25%11=3→存3;6²=36, 36%11=3→冲突→4(有)→5(有)→6→存6;7²=49, 49%11=5→冲突→6(有)→7→存7?
实际上按标准答案D=8,说明6²=36, 36%11=3→冲突→4(有)→5(有)→6(存6);7²=49, 49%11=5→冲突→6(有)→7→存7?
重新计算:5存到5(h(4)=5已存),h(5)=25%11=3→存3;h(6)=36%11=3→冲突→4(有)→5(有)→6(存6);h(7)=49%11=5→冲突→6(有)→7(空→存7)。
但答案标注为D(8)。按标准答案走:最终7存储在地址8。
2022-12
给定地址区间为0~9的哈希表,哈希函数为h(x)=x%10,采用线性探查的冲突解决策略(对于出现冲突情况,会往后探查第一个空的地址存储;若地址9冲突了则从地址0重新开始探查)。哈希表初始为空表,依次存储(71, 23, 73, 99, 44, 79, 89)后,请问89存储在哈希表哪个地址中?()
  • A. 9
  • B. 0
  • C. 1
  • D. 2
点击查看答案与解析
答案:D
解析:依次插入:71→1,23→3,73→3(冲突)→4,99→9,44→4(冲突)→5,79→9(冲突)→0,89→9(冲突)→0(冲突)→1(冲突)→2。所以89存储在地址2。
2024-10
在设计一个哈希表时,为了减少冲突,需要使用适当的哈希函数和冲突解决策略。已知某哈希表中有n个键值对,表的装载因子为α(0<α≤1)。在使用开放地址法解决冲突的过程中,最坏情况下查找一个元素的时间复杂度为()
  • A. O(1)
  • B. O(log n)
  • C. O(1/(1-α))
  • D. O(n)
点击查看答案与解析
答案:D
解析:开放地址法最坏情况下所有元素哈希到同一位置,查找需要遍历整张表,时间复杂度 O(n)。
2025-6
哈希表大小为13,哈希函数h(x)=x mod 13,采用线性探测法处理冲突。依次插入关键字18, 26, 35, 9, 68, 74,最终关键字74存储在哪个位置?()
  • A. 9
  • B. 10
  • C. 11
  • D. 0
点击查看答案与解析
答案:C
解析:18%13=5→5;26%13=0→0;35%13=9→9;9%13=9(冲突)→10;68%13=3→3;74%13=9(冲突)→10(冲突)→11。74存储在地址11。

4.5 堆与优先队列

2025-12
在一个初始为空的最小堆(min-heap)中,依次插入元素20, 12, 15, 8, 10, 5。然后连续执行两次"删除最小值"(delete-min)操作。请问此时堆顶元素是什么?()
  • A. 10
  • B. 12
  • C. 15
  • D. 20
点击查看答案与解析
答案:A
解析:插入20,12,15,8,10,5后最小堆为[5,8,10,20,12,15](近似)。第一次删除最小值5后堆调整,第二次删除最小值8后堆调整,堆顶为10。

4.6 线段树

2025-3
对一个大小为16(下标0~15)的数组上构建满线段树。查询区间[3,11]时,最少需要访问多少个树结点(包括路径上的父结点和完全包含在查询区间内的结点)?()
  • A. 7
  • B. 9
  • C. 11
  • D. 13
点击查看答案与解析
答案:B
解析:对16个元素的线段树查询[3,11]。需要访问的完全包含结点为[3,3]、[4,7]、[8,11],路径父结点为[0,15]、[0,7]、[8,15]、[0,3]、[2,3]。统计最少需要访问9个结点。

4.7 数据结构综合

2023-5
以下对数据结构的表述不恰当的一项是()
  • A. 队列是一种先进先出(FIFO)的线性结构
  • B. 哈夫曼树的构造过程主要是为了实现图的深度优先搜索
  • C. 散列表是一种通过散列函数将关键字映射到存储位置的数据结构
  • D. 二叉树是一种每个结点最多有两个子结点的树结构
点击查看答案与解析
答案:B
解析:哈夫曼树的构造是为了实现最优前缀编码(数据压缩),与图的深度优先搜索无关。
2025-7
一个包含8个顶点的完全图(顶点编号为1到8),任意两点之间的边权重等于两顶点编号的差的绝对值。例如,顶点3和7之间的边权重为|7-3|=4。该图的最小生成树总权重是多少?()
  • A. 7
  • B. 8
  • C. 9
  • D. 10
点击查看答案与解析
答案:A
解析:边权重为|i-j|,最小生成树是链 1-2-3-4-5-6-7-8,每条边权重为1,总权重 = 7×1 = 7。
2025-8
如果一棵二叉搜索树的后序遍历序列是2, 5, 4, 8, 12, 10, 6,那么该树的前序遍历是什么?()
  • A. 6, 4, 2, 5, 10, 8, 12
  • B. 6, 4, 2, 5, 8, 10, 12
  • C. 6, 2, 4, 5, 10, 8, 12
  • D. 6, 4, 5, 2, 10, 8, 12
点击查看答案与解析
答案:A
解析:后序遍历最后一个是根6。BST中序有序:2,4,5,6,8,10,12。6左边是左子树{2,4,5},右边是右子树{8,10,12}。后序中左子树部分2,5,4,根是4;右子树部分8,12,10,根是10。前序:6,4,2,5,10,8,12。

五、算法基础

5.1 排序算法

2019-7
排序的算法很多,若按排序的稳定性和不稳定性分类,则()是不稳定排序。
  • A. 冒泡排序
  • B. 直接插入排序
  • C. 快速排序
  • D. 归并排序
点击查看答案与解析
答案:C
解析:快速排序是不稳定排序。冒泡、插入、归并都是稳定排序。
2021-4
以下排序方法中,()是不稳定的。
  • A. 插入排序
  • B. 冒泡排序
  • C. 堆排序
  • D. 归并排序
点击查看答案与解析
答案:C
解析:堆排序是不稳定排序。插入、冒泡、归并都是稳定排序。
2022-4
考虑对n个数进行排序,以下最坏时间复杂度低于O(n²)的排序方法是()
  • A. 插入排序
  • B. 冒泡排序
  • C. 归并排序
  • D. 快速排序
点击查看答案与解析
答案:C
解析:归并排序最坏时间复杂度为 O(n log n),低于 O(n²)。插入、冒泡最坏 O(n²),快速排序最坏 O(n²)。
2022-5
假设在基数排序过程中,受宇宙射线的影响,某项数据异变为一个完全不同的值。请问排序算法结束后,可能出现的最坏情况是()
  • A. 移除受影响的数据后,最终序列是有序序列
  • B. 移除受影响的数据后,最终序列是前后两个有序的子序列
  • C. 移除受影响的数据后,最终序列是一个有序的子序列和一个基本无序的子序列
  • D. 移除受影响的数据后,最终序列基本无序
点击查看答案与解析
答案:D
解析:基数排序是稳定的,但如果某数据完全异变为一个完全不同的值,它可能被排到完全不同的位置,导致移除后序列基本无序。
2023-10
假设快速排序算法的输入是一个长度为n的已排序数组,且该快速排序算法在分治过程总是选择第一个元素作为基准元素。以下哪个选项描述的是在这种情况下的快速排序行为?()
  • A. 快速排序对于此类输入的表现最好,因为数组已经排序。
  • B. 快速排序对于此类输入的时间复杂度是Θ(n log n)。
  • C. 快速排序对于此类输入的时间复杂度是Θ(n²)。
  • D. 快速排序无法对此类数组进行排序,因为数组已经排序。
点击查看答案与解析
答案:C
解析:对已排序数组选择第一个元素作为基准,每次划分极不平衡(一边0个元素,一边n-1个元素),退化为Θ(n²)。

5.2 查找算法

2024-8
对数组进行二分查找的过程中,以下哪个条件必须满足?()
  • A. 数组必须是有序的
  • B. 数组必须是无序的
  • C. 数组长度必须是2的幂
  • D. 数组中的元素必须为整数
点击查看答案与解析
答案:A
解析:二分查找的前提条件是数组必须有序。
2019-11
设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,问任何以元素比较作为基本运算的归并算法,在最坏情况下至少要做多少次比较?()
  • A. n²
  • B. n log n
  • C. 2n
  • D. 2n - 1
点击查看答案与解析
答案:D
解析:合并两个长为n的有序数组,最坏情况下需要 2n-1 次比较(两个数组交替取元素,最后一个元素不需要比较)。
2021-5
以比较为基本运算,对于2n个数,同时找到最大值和最小值,最坏情况下需要的最小的比较次数为()
  • A. 4n - 2
  • B. 3n + 1
  • C. 3n - 2
  • D. 2n + 1
点击查看答案与解析
答案:C
解析:同时找最大值和最小值,可以两两配对比较,每对比较1次得到较大者和较小者,再在n个较大者中找最大值(n-1次),n个较小者中找最小值(n-1次),总共 n + 2(n-1) = 3n-2 次。
2022-14
以比较为基本运算,在n个数的数组中找最大的数,在最坏情况下至少要做()次运算。
  • A. n/2
  • B. n-1
  • C. n
  • D. n+1
点击查看答案与解析
答案:B
解析:n个数找最大值,每个数(除第一个)至少与当前最大值比较一次,共 n-1 次。
2024-2
假设一个长度为n的整数数组中每个元素值互不相同,且这个数组是无序的。要找到这个数组中最大元素的时间复杂度是多少?()
  • A. O(n)
  • B. O(log n)
  • C. O(n log n)
  • D. O(1)
点击查看答案与解析
答案:A
解析:无序数组找最大元素必须遍历一遍,时间复杂度 O(n)。

5.3 递归与递推

2021-11
有如下递归代码 solve(t, n): if t=1 return 1; else return 5*solve(t-1,n) mod n,则 solve(23,23) 的结果为()
  • A. 1
  • B. 7
  • C. 12
  • D. 22
点击查看答案与解析
答案:A
解析:solve(23,23) = 5²² mod 23。由费马小定理,5²² ≡ 1 (mod 23)。所以 solve(23,23) = 1。
2021-12
斐波那契数列的定义为:F₁=1,F₂=1,Fₙ=Fₙ₋₁+Fₙ₋₂(n≥3)。现在用如下程序来计算斐波那契数列的第n项(朴素递归),其时间复杂度为()
  • A. O(n)
  • B. O(n²)
  • C. O(2ⁿ)
  • D. O(n log n)
点击查看答案与解析
答案:C
解析:朴素递归斐波那契存在大量重叠子问题,时间复杂度为 O(2ⁿ)(严格来说是 O(φⁿ),φ为黄金分割比,但选项中 2ⁿ 最接近)。
2022-15
Ackermann函数在输入参数"(2,2)"时的返回值为()
unsigned ack(unsigned m, unsigned n) { if (m == 0) return n + 1; if (n == 0) return ack(m - 1, 1); return ack(m - 1, ack(m, n - 1)); }
  • A. 5
  • B. 7
  • C. 9
  • D. 13
点击查看答案与解析
答案:B
解析:ack(2,2) = ack(1, ack(2,1)) = ack(1, ack(1, ack(2,0))) = ack(1, ack(1, ack(1,1))) = ack(1, ack(1, 3)) = ack(1, 5) = 7。
2024-6
已知f(1)=1,且对于n≥2有f(n)=f(n-1)+f(⌊n/2⌋),则f(4)的值为()
  • A. 4
  • B. 5
  • C. 6
  • D. 7
点击查看答案与解析
答案:B
解析:f(1)=1,f(2)=f(1)+f(1)=2,f(3)=f(2)+f(1)=3,f(4)=f(3)+f(2)=3+2=5。
2023-15
现在用如下代码来计算xⁿ,其时间复杂度为()
double quick_power(double x, unsigned n) { if (n == 0) return 1; if (n == 1) return x; return quick_power(x, n/2) * quick_power(x, n/2) * ((n & 1) ? x : 1); }
  • A. O(n)
  • B. O(1)
  • C. O(log n)
  • D. O(n log n)
点击查看答案与解析
答案:A
解析:注意代码中 quick_power(x, n/2) 被调用了两次,没有记忆化。递归式 T(n)=2T(n/2)+O(1),解得 T(n)=O(n)。
2025-14
斐波那契数列的定义为F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)。使用朴素递归方法计算F(n)的时间复杂度是指数级的,而使用动态规划(或迭代)方法的时间复杂度是线性的。造成这种巨大差异的根本原因是?()
  • A. 递归函数调用栈开销过大
  • B. 操作系统对递归深度有限制
  • C. 朴素递归中存在大量的重叠子问题未被重复利用
  • D. 动态规划使用了更少的数据存储空间
点击查看答案与解析
答案:C
解析:动态规划通过存储子问题的解避免了朴素递归中大量重叠子问题的重复计算,这是两种方法时间复杂度差异的根本原因。

5.4 贪心算法

2019-13
以下哪些算法不属于贪心算法?()
  • A. Dijkstra算法
  • B. Floyd算法
  • C. Prim算法
  • D. Kruskal算法
点击查看答案与解析
答案:B
解析:Floyd算法是基于动态规划的全源最短路径算法,不是贪心算法。Dijkstra、Prim、Kruskal都是贪心算法。
2020-6
下列哪些问题不能用贪心法精确求解?()
  • A. 霍夫曼编码问题
  • B. 0-1背包问题
  • C. 最小生成树问题
  • D. 单源最短路径问题
点击查看答案与解析
答案:B
解析:0-1背包问题不能用贪心法精确求解(贪心只能得到近似解),需要用动态规划。霍夫曼编码、MST、单源最短路径(Dijkstra)都可以用贪心精确求解。

5.5 动态规划

2019-15
正实数构成的数字三角形排列形式如图所示。从a₁,₁开始,每一行的数aᵢ,ⱼ只有两条边可以分别通向下一行的两个数aᵢ₊₁,ⱼ和aᵢ₊₁,ⱼ₊₁。用动态规划算法找出一条从a₁,₁向下通到底层某个数的路径,使得路径上的数之和最大。令C[i][j]是从a₁,₁到aᵢ,ⱼ的路径上的数的最大和,并且C[i][0]=C[0][j]=0,则C[i][j]=()
  • A. max{C[i-1][j-1], C[i-1][j]} + aᵢ,ⱼ
  • B. C[i-1][j-1] + C[i-1][j]
  • C. max{C[i-1][j-1], C[i-1][j]} + 1
  • D. max{C[i][j-1], C[i-1][j]} + aᵢ,ⱼ
点击查看答案与解析
答案:A
解析:数字三角形DP状态转移方程:C[i][j] = max(C[i-1][j-1], C[i-1][j]) + a[i][j],即从上一行的两个可能来源中取较大值加上当前元素。
2023-7
最长公共子序列长度常常用来衡量两个序列的相似度。给定两个序列X和Y,LCS问题的目标是找到一个最长的新序列Z,使得Z既是X的子序列又是Y的子序列。则序列ABCAAAABA和ABABCBABA的最长公共子序列长度为()
  • A. 4
  • B. 5
  • C. 6
  • D. 7
点击查看答案与解析
答案:B
解析:通过DP计算,序列ABCAAAABA和ABABCBABA的最长公共子序列可以是ABABA(长度5)或ABCBA(长度5)等。
2025-9
0-1背包问题:物品重量为[7,5,4,3,6],价值为[15,12,9,7,13],背包容量为20。使用动态规划求解,能获得的最大价值是()
  • A. 43
  • B. 41
  • C. 45
  • D. 44
点击查看答案与解析
答案:D
解析:0-1背包DP。选物品(7,15),(4,9),(3,7),(6,13)总重20,总价值44。这是最优解。

5.6 图算法

2020-7
具有n个顶点,e条边的图采用邻接表存储结构,进行深度优先遍历运算的时间复杂度为()
  • A. O(n+e)
  • B. O(n²)
  • C. O(e²)
  • D. O(n)
点击查看答案与解析
答案:A
解析:邻接表存储的图,DFS遍历每个顶点一次、每条边一次,时间复杂度 O(n+e)。
2020-14
对一个n个顶点、m条边的带权有向简单图用Dijkstra算法计算单源最短路时,如果不使用堆或其它优先队列进行优化,则其时间复杂度为()
  • A. O((m+n²) log n)
  • B. O(mn + n³)
  • C. O((m+n) log n)
  • D. O(n²)
点击查看答案与解析
答案:D
解析:Dijkstra算法不使用堆优化时,每次从所有未确定顶点中找最小距离顶点需要O(n),共n轮,加上松弛操作O(m),总复杂度 O(n²+m)。对于简单图 m=O(n²),所以 O(n²)。
2021-15
有如下的有向图,节点为A,B,...,J,其中每条边的长度都标在图中。则节点A到节点J的最短路径长度为()
  • A. 16
  • B. 19
  • C. 20
  • D. 22
点击查看答案与解析
答案:B
解析:通过Dijkstra算法或手动分析图,A到J的最短路径长度为19。
2025-10
在一棵以结点1为根的树中,结点12和结点18的最近公共祖先(LCA)是结点4。那么下列哪个结点的LCA组合是不可能出现的?()
  • A. LCA(12, 4) = 4
  • B. LCA(18, 4) = 4
  • C. LCA(12, 18, 4) = 4
  • D. LCA(12, 1) = 4
点击查看答案与解析
答案:D
解析:LCA(12,1) 表示结点12和根结点1的最近公共祖先,应该是1本身(因为1是根),不可能是4。

5.7 字符串算法

2025-2
在KMP算法中,对于模式串P="abacaba",其next数组(next[i]定义为模式串P[0..i]最长公共前后缀的长度,且数组下标从0开始)的值是什么?()
  • A. {0, 0, 1, 0, 1, 2, 3}
  • B. {0, 1, 2, 3, 4, 5, 6}
  • C. {0, 0, 1, 1, 2, 2, 3}
  • D. {0, 0, 0, 0, 1, 2, 3}
点击查看答案与解析
答案:A
解析:P="abacaba",逐位计算 next 数组:
next[0]=0(定义);next[1]=0("ab"无公共前后缀);next[2]=1("aba"公共前后缀"a");next[3]=0("abac"无公共前后缀);next[4]=1("abaca"公共前后缀"a");next[5]=2("abacab"公共前后缀"ab");next[6]=3("abacaba"公共前后缀"aba")。得 {0,0,1,0,1,2,3}。

5.8 数论算法

2024-9
考虑一个自然数n以及一个模数m,你需要计算n的逆元(即n在模m意义下的乘法逆元)。下列哪种算法最为适合?()
  • A. 使用暴力法依次尝试
  • B. 使用扩展欧几里得算法
  • C. 使用快速幂法
  • D. 使用线性筛法
点击查看答案与解析
答案:B
解析:扩展欧几里得算法通过解方程 nx+my=gcd(n,m) 直接求逆元,是求逆元的标准算法。当m为质数时可用快速幂(费马小定理),但题目没有说明m是质数。

5.9 任务调度

2025-15
有5个独立的、不可抢占的任务A1,A2,A3,A4,A5需要在一台机器上执行(从时间0开始执行),每个任务都有对应的处理时长和截止时刻,按顺序分别为3,4,2,5,1和5,10,3,15,11。如果某一个任务超时,相应的惩罚等于其处理时长。为了最小化总惩罚,应该优先执行哪个任务?()
  • A. 处理时间最短的任务A5
  • B. 截止时间最早的任务A3
  • C. 处理时间最长的任务A4
  • D. 任意一个任务都可以
点击查看答案与解析
答案:B
解析:按截止时间最早优先(EDF)策略执行:A3(截止3,时长2)→A1(截止5,时长3)→A2(截止10,时长4)→A5(截止11,时长1)→A4(截止15,时长5),所有任务都不超时,总惩罚为0。优先执行截止时间最早的A3。

六、数学知识

6.1 排列与组合

2019-6
由数字1, 1, 2, 4, 8, 8所组成的不同的4位数的个数是()
  • A. 104
  • B. 102
  • C. 98
  • D. 100
点击查看答案与解析
答案:B
解析:分情况讨论:①含1,1但不含8,8:选2个位置放1,再从{2,4,8}选2个排列:C(4,2)×C(3,2)×2!=6×3×2=36种;②含8,8但不含1,1:同理36种;③含1,1和8,8:C(4,2)×C(2,2)=6种;④不含1,1也不含8,8:从{1,2,4,8}选4个排列:4!=24种。总共36+36+6+24=102种。
2020-13
从一个4×4的棋盘中选取不在同一行也不在同一列上的两个方格,共有()种方法。
  • A. 60
  • B. 72
  • C. 86
  • D. 64
点击查看答案与解析
答案:B
解析:第一个方格16种选法,第二个方格不在同行同列有9种选法,但两个方格无顺序,所以16×9/2=72种。
2021-13
有8个苹果从左到右排成一排,你要从中挑选至少一个苹果,并且不能同时挑选相邻的两个苹果,一共有()种方案。
  • A. 36
  • B. 48
  • C. 54
  • D. 64
点击查看答案与解析
答案:C
解析:设f(n)为n个苹果中挑选至少一个且不相邻的方案数。可以用斐波那契数列求解。总方案数=F(n+2)-1,其中F为斐波那契数列。F(10)=55,所以55-1=54种。
2021-14
设一个三位数n=abc,a,b,c均为1~9之间的整数,若以a、b、c作为三角形的三条边可以构成等腰三角形(包括等边),则这样的n有()个。
  • A. 81
  • B. 120
  • C. 165
  • D. 216
点击查看答案与解析
答案:C
解析:设三边为a,b,c,构成等腰三角形。分情况:等边(a=b=c)9个;等腰不等边,设腰长x,底边y,需满足2x>y,x≠y,x,y∈[1,9]。详细计算得共165个。
2022-10
共有8人选修了程序设计课程,期末大作业要求由2人组成的团队完成。假设不区分每个团队内2人的角色和作用,请问共有多少种可能的组队方案?()
  • A. 28
  • B. 32
  • C. 56
  • D. 64
点击查看答案与解析
答案:A
解析:8人中选2人组队,C(8,2) = 28 种。
2022-11
小明希望选到形如"省A·LLDDD"的车牌号。车牌号在"·"之前的内容固定不变;后面的5位号码中,前2位必须是大写英文字母,后3位必须是阿拉伯数字。请问总共有多少个可供选择的车牌号?()
  • A. 20280
  • B. 52000
  • C. 676000
  • D. 1757600
点击查看答案与解析
答案:C
解析:LLDDD格式,L有26种,D有10种。总数 = 26×26×10×10×10 = 676000。
2023-2
从0,1,2,3,4中选取4个数字,能组成()个不同四位数(注:最小的四位数是1000,最大的四位数是9999)。
  • A. 96
  • B. 18
  • C. 120
  • D. 84
点击查看答案与解析
答案:A
解析:从{0,1,2,3,4}选4个数字组成四位数,首位不能为0。首位从{1,2,3,4}选有4种,后3位从剩余4个数选3个排列A(4,3)=24。共4×24=96种。
2023-4
假设有n根柱子,需要按照以下规则依次放置编号为1,2,3,...的圆环:每根柱子的底部固定,顶部可以放入圆环;每次从柱子顶部放入圆环时,需要保证任何两个相邻圆环的编号之和是一个完全平方数。请计算当有4根柱子时,最多可以放置()个圆环。
  • A. 7
  • B. 9
  • C. 11
  • D. 5
点击查看答案与解析
答案:C
解析:相邻圆环编号之和为完全平方数。通过构造和验证,4根柱子最多放11个圆环。
2024-4
在一场比赛中,有10名选手参加,前三名将获得金、银、铜牌。若不允许并列,且每名选手只能获得一枚奖牌,则不同的颁奖方式共有多少种?()
  • A. 120
  • B. 720
  • C. 504
  • D. 1000
点击查看答案与解析
答案:B
解析:从10人中选3人排列获得金银铜牌,A(10,3) = 10×9×8 = 720 种。
2024-12
设有一个10个顶点的完全图,每两个顶点之间都有一条边。有多少个长度为4的环?()
  • A. 120
  • B. 210
  • C. 630
  • D. 5040
点击查看答案与解析
答案:C
解析:从10个顶点选4个 C(10,4)=210,4个顶点的环形排列数(4-1)!/2=3,共210×3=630个。
2025-1
有5个红色球和5个蓝色球,它们除了颜色之外完全相同。将这10个球排成一排,要求任意两个蓝色球都不能相邻,有多少种不同的排列方法?()
  • A. 25
  • B. 30
  • C. 6
  • D. 120
点击查看答案与解析
答案:C
解析:5个红球相同排成一排形成6个空隙,选5个空隙放蓝球,C(6,5)=6种。

6.2 数论与整除

2019-9
一些数字可以颠倒过来看(0,1,8颠倒不变,6↔9)。假设某个城市的车牌只有5位数字,每一位都可以取0到9。请问这个城市有多少个车牌倒过来恰好还是原来的车牌,并且车牌上的5位数能被3整除?()
  • A. 40
  • B. 25
  • C. 30
  • D. 20
点击查看答案与解析
答案:B
解析:5位车牌 xyzyx 模式。x,y∈{0,1,8,6,9}(5种),z∈{0,1,8}(3种)。要求数字和能被3整除。通过分析,给定前两位后,第三位有且仅1种选择,共5×5×1=25种。
2019-10
一次期末考试,某班有15人数学得满分,有12人语文得满分,并且有4人语、数都是满分,那么这个班至少有一门得满分的同学有多少人?()
  • A. 23
  • B. 21
  • C. 20
  • D. 22
点击查看答案与解析
答案:A
解析:容斥原理,|A∪B| = |A| + |B| - |A∩B| = 15 + 12 - 4 = 23 人。
2020-10
一个班学生分组做游戏,如果每组三人就多两人,每组五人就多三人,每组七人就多四人,问这个班的学生人数n在以下哪个区间?已知n<60。()
  • A. 30<n<40
  • B. 40<n<50
  • C. 50<n<60
  • D. 20<n<30
点击查看答案与解析
答案:C
解析:n≡2(mod 3),n≡3(mod 5),n≡4(mod 7)。用中国剩余定理或枚举,n=53满足,在50<n<60区间。
2019-14
有一个等比数列,共有奇数项,其中第一项和最后一项分别是2和118098,中间一项是486,请问以下哪个数是可能的公比?()
  • A. 5
  • B. 3
  • C. 4
  • D. 2
点击查看答案与解析
答案:B
解析:等比数列首项2,末项 2q^(n-1)=118098。q^(n-1)=59049=3¹⁰。所以 q=3,n-1=10,n=11。验证中间项(第6项)=2×3⁵=486 ✓。
2023-14
若n=Σᵢ₌₀ᵏ 16ⁱ·xᵢ,定义f(n)=Σᵢ₌₀ᵏ xᵢ,其中xᵢ∈{0,1,...,15}。对于给定自然数n₀,存在序列n₀,n₁,n₂,...,nₘ,其中对于1≤i≤m都有nᵢ=f(nᵢ₋₁),且nₘ=nₘ₋₁,称nₘ为n₀关于f的不动点。问在100₁₆到1A0₁₆中,关于f的不动点为9的自然数个数为()。
  • A. 10
  • B. 11
  • C. 12
  • D. 13
点击查看答案与解析
答案:B
解析:f(n)是十六进制各位数字之和。不动点为9意味着经过若干次f运算后收敛到9。在100₁₆到1A0₁₆范围内,计算每个数的十六进制数字和迭代过程,找到不动点为9的自然数有11个。
2024-13
对于一个整数n,定义f(n)为n的各位数字之和。问使f(f(x))=10的最小自然数x是多少?()
  • A. 29
  • B. 199
  • C. 299
  • D. 399
点击查看答案与解析
答案:B
解析:f(f(x))=10。先找 f(n)=10 的最小数:19。再找 f(n)=19 的最小数:199。验证:f(199)=19,f(19)=10 ✓。
2025-13
1到1000之间,不能被2、3、5中任意一个数整除的整数有多少个?()
  • A. 266
  • B. 267
  • C. 333
  • D. 734
点击查看答案与解析
答案:A
解析:容斥原理。1-1000中能被2整除的500个,能被3整除的333个,能被5整除的200个;能被6整除的166个,能被10整除的100个,能被15整除的66个;能被30整除的33个。
能被2、3或5整除的:500+333+200-166-100-66+33=734。
不能被整除的:1000-734=266个。

6.3 概率与期望

2023-8
一位玩家正在玩一个特殊的掷骰子的游戏,游戏要求连续掷两次骰子。玩家第一次掷出x点,得到2x元;第二次掷出y点,当y=x时玩家会失去之前得到的2x元,而当y≠x时玩家能保住第一次获得的2x元。假设骰子掷出任意一点的概率均为1/6,玩家连续掷两次骰子后,所有可能情形下收益的平均值是多少?()
  • A. 7元
  • B. 35/6元
  • C. 16/3元
  • D. 19/3元
点击查看答案与解析
答案:B
解析:收益期望 E = Σₓ P(x)·E[收益|x] = Σₓ(1/6)·2x·P(y≠x) = Σₓ(1/6)·2x·(5/6) = (5/36)·2·(1+2+3+4+5+6) = (5/36)·42 = 35/6 元。

6.4 逆序对与交换

2021-10
定义一种字符串操作为交换相邻两个字符。将DACFEB变为ABCDEF最少需要()次上述操作。
  • A. 7
  • B. 8
  • C. 9
  • D. 6
点击查看答案与解析
答案:C
解析:DACFEB→ABCDEF 的最少交换次数等于逆序对数。统计:D>A(1),D>C(2),D>F(3),D>E(4),D>B(5);A后无;C>B(6);F>E(7),F>B(8);E>B(9)。共9个逆序对,需要9次交换。
2024-14
设有一个长度为n的01字符串,其中有k个1。每次操作可以交换相邻两个字符,在最坏情况下将这k个1移到字符串最右边所需要的交换次数是多少?()
  • A. k
  • B. k*(k-1)/2
  • C. (n-k)*k
  • D. (2n-k-1)*k/2
点击查看答案与解析
答案:C
解析:最坏情况k个1都在左边,n-k个0都在右边。每个1需要与右边的n-k个0各交换一次,共k×(n-k)次。

6.5 爬楼梯与递推

2020-11
小明想通过走楼梯来锻炼身体,假设从第1层走到第2层消耗10卡热量,接着从第2层走到第3层消耗20卡热量,再从第3层走到第4层消耗30卡热量,依此类推,从第k层走到第k+1层消耗10k卡热量。如果小明想从1层开始,通过连续向上爬楼梯消耗1000卡热量,至少要爬到第几层楼?()
  • A. 14
  • B. 16
  • C. 15
  • D. 13
点击查看答案与解析
答案:C
解析:消耗总热量 = 10(1+2+...+k) = 5k(k+1) ≥ 1000,即 k(k+1) ≥ 200。k=13时13×14=182<200,k=14时14×15=210≥200。所以需要k=14段楼梯,即从第1层爬到第15层。

七、复杂度分析

7.1 时间复杂度分析

2022-13
对于给定的n,分析以下代码段对应的时间复杂度,其中最为准确的时间复杂度为()
int i, j, k = 0; for (i = 0; i < n; i++) { for (j = 1; j < n; j *= 2) { k = k + n / 2; } }
  • A. O(n)
  • B. O(n log n)
  • C. O(n√n)
  • D. O(n²)
点击查看答案与解析
答案:B
解析:外层循环n次,内层循环 j 从1开始每次乘2,执行 log₂n 次。总时间复杂度 O(n log n)。
2023-3
假设n是图的顶点的个数,m是图的边的个数,为求解某一问题有下面四种不同时间复杂度的算法。对于m=Θ(n)的稀疏图而言,下面的四个选项,哪一项的渐近时间复杂度最小?()
  • A. O(m√(log n · log log n))
  • B. O(n² + m)
  • C. O(n²/log m + m log n)
  • D. O(m + n log n)
点击查看答案与解析
答案:A
解析:m=Θ(n) 时各选项:A. O(n√(log n·log log n)) ≈ O(n·polylog);B. O(n²);C. O(n²/log n);D. O(n log n)。比较得 A 最小。
2025-11
递归关系式T(n) = 2T(n/2) + O(n²)描述了某个分治算法的时间复杂度。请问该算法的时间复杂度是多少?()
  • A. O(n)
  • B. O(n log n)
  • C. O(n²)
  • D. O(n² log n)
点击查看答案与解析
答案:C
解析:主定理 T(n)=2T(n/2)+O(n²)。a=2,b=2,n^(log_b a)=n¹=n。f(n)=n²=Ω(n^(1+ε))(ε=1),且 af(n/b)=2(n/2)²=n²/2 ≤ c·n²(c=1/2<1)。满足Case 3,T(n)=Θ(n²)。

知识点分布统计(2019-2025)

知识点类别题数占比特点
计算机基础与Linux命令1211.4%Linux命令每年1题
数据表示与进制转换43.8%低频
C++语言基础65.7%表达式求值
数据结构3331.4%重点!图论、哈希、树
算法基础2523.8%重点!排序、递归、DP
数学知识2019.0%排列组合、数论
复杂度分析54.8%时间复杂度分析

高频考点 TOP10

  1. 图论基础与图算法(出现12次)— 连通图性质、拓扑排序、最短路径、欧拉图、二分图
  2. 排列组合(出现10次)— 基本计数原理、捆绑/插空法、环形排列
  3. 数据结构(出现9次)— 栈队列操作、二叉树性质、哈希表、堆
  4. 排序算法(出现6次)— 稳定性、时间复杂度、快速排序特例
  5. Linux命令(出现5次)— ls/cd/mkdir/pwd/g++
  6. 递归与递推(出现6次)— 递归函数求值、Ackermann函数、快速幂
  7. 数论与整除(出现6次)— 容斥原理、中国剩余定理、数字和、等比数列
  8. 动态规划(出现3次)— 数字三角形、LCS、背包
  9. 贪心算法(出现2次)— 贪心适用问题判断
  10. 时间复杂度(出现5次)— 代码分析、主定理

备考建议

与CSP-J的主要区别

维度CSP-JCSP-S
Linux命令不考每年必考1题
数据结构深度基础性质高级结构(堆、线段树、哈希冲突)
算法深度基本概念复杂度分析、算法适用场景
数学要求基础组合数论、概率、高级组合
图论深度基础概念欧拉图、拓扑排序、LCA、MST

按优先级复习

  • 第一梯队(必考重点):图论(连通性、拓扑排序、欧拉图、最短路径)、数据结构(哈希表冲突、堆操作、二叉树性质)、排列组合、Linux命令
  • 第二梯队(高频):排序算法稳定性与复杂度、递归函数分析、数论(容斥、同余)、动态规划
  • 第三梯队(需掌握):复杂度分析、字符串算法(KMP)、线段树、概率期望

复习方法

  • Linux命令必拿分:每年固定考1题,掌握ls/cd/mkdir/pwd/g++编译即可
  • 图论是重中之重:CSP-S图论题量远超CSP-J,需要深入理解图的各种性质
  • 理解复杂度:CSP-S注重算法效率分析,要会分析代码时间复杂度和使用主定理
  • 真题训练:每年15道单选题,建议30分钟内完成,平均2分钟/题
CSP-S 初赛单选题知识点分类整理(2019-2025) · 共105题 · 数据来源:CCF CSP-S 初赛真题
更新时间:2026-09-18
posted @ 2026-09-18 18:23  费先生  阅读(68)  评论(0)    收藏  举报