一、单项选择题 (共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1. 182 和 208 的最大公约数是。(B)
A. 2B. 26C. 28D. 29题解&解析:可以通过试除的方法算出这两个数的最大公约数是 29。
2. 用1、2、3、4、5 这五个数字可组成多少个比 20000 大且百位数字不是 3的无重复数字的五位数。( D)A. 80B. 96C. 72D. 78题解&解析:把 3 放在最高位上,其余四个数可以任意放置,一共有4!=24 种方案;把 2、4、5 放在最高位上,有 3 种选择,百位上不能放 3,也只有 3 种选择,其余位置有 3! = 6 种方案,因此有 3 ∗ 3 ∗ 3! = 54 种方案。一共有 24+54=78 种不同方案。
3. 有一个长为 6 的 A 序列:{3, 20, 4, 6, 1},现通过进行交换其中相邻两个数字的操作进行排序,要将 A 序列排成从小到大的递增序列最少要进行多少次交换操作。( B )A. 5B. 6C. 7D. 15题解&解析:将 1 移到最左侧和将 20 移到最右侧。
4. 一个栈的输入顺序为 1 2 3 4 5,下列序列中可能是栈的输出序列是。( C)A. 54312B. 24135C. 21543D. 12534题解&解析:太简单不讲
5. 二叉树 T,已知其先根遍历是 1 2 4 3 5 7 6(数字为结点的编号,以下同),中根遍历是2 4 1 5 7 3 6,则该二叉树的后根遍历是( C )。A. 4 2 5 7 6 3 1B. 7 4 2 5 6 3 1C. 4 2 7 5 6 3 1D. 4 2 7 6 5 3 1题解&解析:通过前序遍历和中序遍历构建出原树,然后再求其后序遍历即可
6. 如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。例如 00000001 表示 +1, 10000001 表示 −1,试问这样表示法的整数A的范围应该是 ( C )。A. −127 ≤ A ≤ 128B. −128 ≤ A ≤ 128C. −127 ≤ A ≤ 127D. −128 ≤ A < 128题解&解析:注意题目说 是原码,因此无法表示出 −128
7. 定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串 BCA 可以将 A 移到 B 之前,变字符串 ABC,如果要将字符串 DACHEBGIF 变成ABCDEFGHI 最少需要次操作( C )。A. 6B. 5C. 4D. 7题解&解析:注意啊注意,这里说的是最少四次操作分别为: B 移动到 AC 之间;D 移动到 CH 之间;H 移动到 GI 之间;F 移动到 EG 之间
8. 今年信息学进复赛的同学有 6人,老师将他们排成 一圈 分发奖品,请问有几种排法( B )。A. 240B. 120C. 60D. 180题解&解析:
圆排列的方案数 = (n − 1)!(直接背)
9. 从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端,这种排序方法称为( A )。A. 插入排序B. 选择排序C. 快速排序D. 归并排序
题解&解析:
背的内容
10.电线上停着两种鸟 (A, B),两只相邻的鸟就将电线分为了一个线段。这些线段可分为两类: 一类是两端的小鸟相同;另一类是两端的小鸟不相同。已知:电线上两个顶点上正好停着相同的小鸟,试问两端为不同小鸟的线段数目一定是( A )。A. 偶数B. 奇数C. 可奇可偶D. 数目固定
题解&解析:
通过例子来理解假设两端均为 A,那么如果向其中填 A 则是将区间划分为了两个子区间,如果填 B 则是产生了两个不同小鸟的线段。可以看出每次只能产生偶数个不同小鸟的线段,所以总数⽬一定是偶数。
11.设有一个二维数组A。在行下标0 ∼ 5,列下标1 ∼ 5的范围内存上数据元素,A的每个数据元素均占2个字节。在按行存储的情况下,已知数据元素 A[3][3] 的第一个字节是 2019,则 A[4][4] 的第一个字节的地址为( D )。A. 2026B. 2027C. 2031D. 2033
题解&解析:
数数
12.表达式 (1+34)*5-56/7 的后缀表达式为(A)。A. 1 34 + 5 * 56 7 / -B. 1 34 + 5 56 7 - * /C. - * + 1 34 5 / 56 7D. 1 34 5 * + 56 7 /
题解&解析:
中缀表达式转后缀表达式。入栈模拟即可
13.一个字长为8位的整数的补码是 1111 1001 ,则它的原码是( A )。A. 10000111B. 11111001C. 01111001D. 00000111
题解&解析:
太简单不讲
14.关于Catalan数Cn,下列说法错误的是 ( B )。A. Cn表示含n对括号的合法括号序列的个数。B. Cn表示有n + 1个结点的不同形态的二叉树的个数。C. Cn表示通过连接顶点而将n + 2边的凸多边形分成三⻆形的方法个数。D. Cn表示长度为n的入栈序列对应的合法出栈序列个数
题解&解析:
其表示有 n 个节点的不同形态的二叉树的个数
15.字符串 abcab 本质不同的子串(包含空串)个数( D )。A. 15B. 12C. 14D. 13
题解&解析:本质不同的字串分别为:“”、“a”、“b”、“c”、“ab”、“bc”、“ca”、“abc”、“bca”、“cab”、“abca”、“bcab”、“abcab”,共 13 种
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确
填T,错误填F;除特殊说明外,判断题1.5分,选择题3分,共计40分)
(1)
16.输入的x值应在 [0, n−1] 的范围内。(
F
)
17.把第10行改成d[x]++ ,不影响程序运行结果。(
T
)
18.对任意在[1, 9]之间的数i,都有 d[i-1]<d[i]<d[i+1] 。(
F
)
19.把第16行改成\if(d[i]>d[i-1]),程序运行的结果会发⽣改变。(
F)
20.输人n=9后,接着输入: 1 3 4 5 2 4 3 5 2 后,程序输出结果为(B)
A. 1:1 2:2 3:3 4:4 5:5
B. 1:1 2:2 3:4 4:6 5:8
C. 1:0 2:1 3:2 4:1 5:2
D. 1:1 2:2 3:3 4:2 5:3
21.(4分)把程序第 17 行改成 print("%3d" ,i); 后,输入 n = 10 后,
接着输入:1 3 4 1 5 4 4 3 5 1 后,程序输出结果为(C)。
A. 4 3 4 3
B. 3 2 3 2
C. 1 3 4 5
D. 1 2 3 4 5
(2)
22.若 n < r,则程序无输出。(
T
)
23.程序结束时,对任意 1 ≤ i ≤ n, mark[i] == 0 。(
T
)
24.此程序的时间复杂度为 O(n)。(
F
)
25.若输入为 4 3 ,则输出中数字 1 和 2 的个数不同。(
F
)
26.(4分)若输入为 6 3 ,则函数 print 的执行次数为(B)。
A. 60
B. 120
C. 6
D. 720
27.若输入为 7 4,则输出的最后一行为(D)。
A. 1 2 3 4
B. 4 5 6 7
C. 4 3 2 1
D. 7 6 5
(3)
代码很长,但是千万别慌
28.(2分)第 33, 34 行 add_edge(u, v);add_edge(v, u); 只需保留
任意一行也不会影响程序的正确性。(
F
)
29.第37行函数调用 dfs(x,y) ,只需保证 1≤x≤n, y≤0 即可。(
T
)
30.第3行输入若有重复(重边),不影响输出结果的正确性。(
F
)
31.(2分)程序运行结束时可能存在正整数 i(i≤n) 使sz[i]等于
mxs[i]。(
F
)
32.(4分)n=6,二元组 (u, v)各个值分别是{(1,3),(6,3),(2,6),(5,6),
(3,4)}则输出是(B)。
A. 3 2
B. 3 3
C. 6 2
D. 6 3
33.(4分)若n=1000,则程序运行后 mxs[] 数组中除初始值 inf 外,
最大值是(D)。
A. 1000
B. 499
C. 500
D. 999
说明: 该段代码是在计算树的编号最小的重心。重心的定义如下:设 f(u) 表示以 u 为树根时,其所有儿子的子树节点数最大的值,则 f(u) 最小的点即为重心。计算重心时,依次计算每个点的子树节点数,再用总节点数 −sz[u] 的方式计算出由父亲侧构成的子树的节点数。之后将这些节点数取最大值就可以计算出单点的 f(u) 值。
三、完善程序(单选题,每小题3分,共计30分)
(1)
有一个n*n(2≤n≤5000) 的方阵,其中每个方格有一个电力值。小Y可
以在这个方阵中得到电力,方法就是在一些方格放上电电鼠来吸收电
力,这样就可以获得这些方格上的电力。不过,放的电电鼠须要遵循两
个规则:
1. 一个方格最多只能放一只电电鼠;
2. 所有2*2的子矩阵(共有(n−1) *(n−1)个)必须恰好包含两只电电
鼠。
小Y用了一个程序求出了能获得的最大总电力值.
34.①处应填( )
A. [N][2]
B. [2][N]
C. [5100][5100]
D. [N][1100]
35.②处应填( )
A. a[i][j]
B. a[j][i]
C. a[(i+j)&1][i+j]
D. a[i+j][(i+j)&1]
36.③处应填( )
A. a[i][j]
B. a[j][i]
C. a[(i+j)&1][i+j]
D. a[i+j][(i+j)&1]
37.④处应填( )
A. j&1
B. !(j│1)
C. !(j&1)
D. j│1
38.⑤处应填( )
A. min(ans1, ans2)
B. max(ans1,ans2)-min(ans1,ans2)
C. ans1+ans2
D. max(ans1, ans2)
答案
CABCD
解析
说明:
观察规律,我们可以发现,在任何一种方案中,都会呈现
出重复前两行或者重复前两列的规律。也就是说,我们可以通过
枚举这两种不同的情况来找出所有的方案。观察规律可以发现,
在列复制的情况下,每一行要么是奇数编号的点全部被选择,要
么是偶数编号的点全部被选择。所以在代码中,我们可以枚举所
有的行并将其奇数点的和与偶数点的和统计起来,并贪心地选择
最大的一种策略,这就是代码 中 ans1 的计算原理。 ans2 的
计算无非就是在计算行复制的情况,与上面的过程是类似的
(2)
给定
n
个不同的数 a
1
, ..., a
n
。求 n 个数字当中第 l 到第 r 个数当
中的中位数,我们可以用二分的经典思想来解决此问题。
所谓中位数就是 n 个数中从小到大排序第
⌊n/2⌋ 个数
39.①处应填( )
A. n * 2
B. n
C. maxn + 1
D. maxn - 1
40.②处应填( )
A. l < r
B. l <= r
C. l + r < n
D. l + 1 < r
41.③处应填( )
A. r - 1
B. l + r
C. r - l + 1
D. D. (l + r) >> 1
42.④处应填( )
A. l
B. r
C. lft
D. rgt
43.⑤处应填( )
A. l
B. r
C. lft
D. rgt
答案
CDDBA
解析
说明:对于每个询问的区间,通过二分的方式来寻找中位数。每
次二分一个 mid,查找序列中有多少个数字是小于它或大于它的,
根据这个数字再继续进行二分过程直到退出二分。注意由于这里
使用的二分中使用的区间是 [l, r),所以变量 r 是 maxn+1 。
完结撒花❀