单选题

第1题

以下哪一个术语与数据结构的存储结构无关?
A. 二叉树
B.顺序表
C.链表
D.散列表

第2题

一趟排序结束后不一定能够选出一个元素放在其最终位置上的是?
A. 快速排序
B.冒泡排序
C.堆排序
D.插入排序

第3题

设某无向图中有n个顶点e条边,则该无向图中所有顶点的入度之和为?
A. e
B. n
C. 2n
D. 2e

第4题

设某课二叉树中有1000个结点,则该二叉树的最小高度为?
A. 10
B. 9
C. 11
D. 12

第5题

给定操作数n,将其二进制表示的第k位清零,可以用表达式____。
A. n ^ (1 << k - 1)
B. n & ~(1 << k - 1)
C. n | (1 << k - 1)
D. n & (1 << k - 1)

第6题

设一组初始记录关键字序列为(50, 40, 95, 20, 15, 70, 60, 45), 则以增量d=4的一趟希尔排序结束后最后4个记录关键字为____。
A. (15, 40, 95, 20)
B. (15, 70, 60, 45)
C. (50, 40, 95, 45)
D. (50, 70, 95, 45)

第7题

有6个元素6,5,4,3,2,1的顺序进栈,问你下列哪一个不是合法的出栈顺序?
A. 4,5,3,1,2,6
B. 5,4,3,6,1,2
C. 3,4,5,6,1,2
D. 2,3,4,1,6,5

第8题

已知哈希表长度m=11,哈希函数为H(key)=key&11, 表中已有3个节点:H(47)=3、H(26)=4、H(60)=5,其余地址为空,如用二次探测再散列处理冲突,关键字为48的节点的地址是____。
A. 2
B. 8
C. 6
D. 9

第9题

如果按照行的顺序将一个n阶的下三角矩阵A中的元素(包括对角线上元素)存放在n(n+1)个连续的存储单元中,则A[i][j]与A[0][0]之间(不包括A[i][j]和A[0][0])的数据元素个数为____。
A. i*(i+1)/2+i
B. i*(i+1)/2+j-1
C. i*(i+1)/2+j
D. i*(i+1)/2+j+1

第10题

已知一个按升序排序过的数组以及数字N, 在该数组中查找两个数,使得它们的和正好等于N,找到即可停止,则以下选项中,可以实现该算法的最小时间复杂度为____。
A. O(n)
B. O(logn)
C. O(n^2)
D. O(n^3)

第11题

设F是由T1、T2和T3三棵树组成的森林,与F对应的二叉树B以T1为根节点,T1、T2和T3的结点数分别为N1, N2和N3, 则二叉树B的根节点的右子树的结点数为_______。
A. N^2 - 1
B. N^1 - 1
C. N^2 + N^3
D. N^1 + N^3

第12题

如果以下程序代码是找出数组中出现次数超过数组长度一半的那个数字(假设该数存在),则以下两处下划线可以填入的语句为____。

1
2
3
4
5
6
7
8
9
10
11
12
13
int getMajor(intp[] a, int n) {
int x = 0, count = 0;
for (int i = 0; i < n; i++) {
if (count == 0) {
x = a[i];
count++;
} else if (a[i] == x) {
_________;
} else {
_________;
}
}
}

A. count--; count++;
B. count++; count--;
C. count++; count=0;
D. count--; count=i;

第13题

碎片是指_________。
A. 没有被使用的存储区
B. 存储分配完后所剩的空闲区
C. 未被使用,而又暂时不能使用的存储区
D. 不能被使用的存储区

第14题

关于HTTP和HTTPS以下说法错误的是_________。
A. HTTPS协议运行于SSL之上,是添加了加密和认证机制的HTTP, 比HTTP更安全。
B. HTTP协议运行在UDP之上,明文传输,客户端与服务器端都无法验证对方身份。
C. HTTPS相比HTTP更耗费服务器资源。
D. 使用HTTPS需要申请证书。

第15题

以下说法错误的是_________。
A. Mysql 建立联合索引时遵循最左前缀匹配原则。
B. SQL 语句性能分析的关键字是EXPLAIN。
C. Select ID from T where num is null 能够应用到索引;
D. groupd by 能实现分组查询。

第16题

一个边长为8cm的立方体,表面涂满油漆,现在将它切割成边长为0.5cm的小立方体,两个表面有油漆的小立方体有______个。
A. 168
B. 144
C. 192
D. 256

第17题

设f(x) = cos(wx)的最小正周期为6,则f(1)+f(2)+…+f(2020)的值是______。
A. 1
B. 0
C. 1.5
D. -1.5

第18题

已知f(x)是定义域为(-∞,∞)上的奇函数,满足f(1-x)=f(1+x)。若f(1)=2, 则f(1)+f(2)+…+f(2020)=_______。
A. 0
B. -50
C. 2
D. 50

第19题

公司一游戏开发团队中,有甲乙丙三人,一个福建人,一个湖北人,一个山东人。他们的岗位,分别是策划、测试、程序。
已知:
乙不是做程序的
乙也不是山东人
丙不是福建人
做策划的不是湖北人
做程序的是福建人
根据以上条件,可以确认丙的岗位是_______。
A. 测试
B. 策划
C. 程序
D. 无法确认

第20题

在一次数学竞赛中,共出甲、乙、丙三题,在所有25个参赛的学生中,每个学生至少解出一题: 在所有没有解出甲题的学生中,解出乙题的人数是解出丙题的人数的两倍; 只解出甲题的学生比余下的学生中解出甲题的学生的人数多1;只解一题的学生中,有一半没有解出甲题。问共有_____学生只解出乙题?
A. 6
B. 5
C. 7
D. 8

第21题

某系统有4个并发进程,分别为进程A、进程B、进程C、进程 D。
进程A需要资源的数量为6,
进程B需要资源的数量为5,
进程C需要资源的数量为4,
进程D需要资源的数量为7,
请问要确保系统不会发生死锁,资源数量至少为________。

第22题

请阅读以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int c = 0x000ffeff;
int i = 0;
while (c) {
i++;
c &= (c - 1);
}
printf("%d\n", i);
return 0;
}

请问代码执行后控制台输出的值为______。

个人解答:
这边看了下代码,就是把二进制里面所有的1每次都异或一个,所以这边的i就是用来计数c的二进制里面有多少个1。0xffeff的二进制里面,一个f是4个’1’,一个e是3个’1’。最终的结果就是4*4+3=19。

第23题

请阅读以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <string.h>
int main()
{
const char *str = "abcbaabcbaa";
int ret = 0;
for (int i = 1;i < strlen(str);++i) {
int l = 0;
int r = i;
while (l <= r) {
if (str[l] != str[r]) {
l++;
r--;
} else {
break;
}

if (l > r) {
ret++;
}
}
printf("%d", ret);
return 0;
}
}

请问代码执行后控制台输出的值为______。

第24题

请阅读以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
int func(int n)
{
int a = 1;
int b = 10 * a;
int c = 0;
while (n >= a)
{
b = 10 * a;
switch ((b % b) / a)
{
case 0:
c += (n / b) * a;
break;
case 1:
c += n / b * a;
c += n % a + 1;
break;
default:
c += (n / b + 1) * a;
break;
}
a *= 10;
}
return c;
}

int main()
{
printf("%d\n", func(2019));
return 0;
}

请问代码执行后控制台输出的值为______。

第25题

请阅读以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <algorithm>
using namespace std;

int calc(int nums[], int start, int end, int k);

int f1(int nums[], int start, int end)
{
for (int i = start + 1; i <= end; ++i){
int temp = nums[i];
int j = i - 1;
while (j >= start && nums[j] > temp){
nums[j + 1] = nums[j--];
}
nums[j + 1] = temp;
}
return start + (end - start) / 2;
}

int f2(int nums[], int start, int end)
{
if (end - start < 5)
return f1(nums, start, end);

int j = start - 1;
int i = start;
for (;i+4 <= end; i += 5)
swap(nums[++j], nums[f1(nums, i, i + 4)]);
return calc(nums, start, j, (j - start + 1) / 2 + 1);
}

int f3(int nums[], int start, int end, int idx)
{
swap(nums[start], nums[idx]);

int j = start;
for (int i = start; i < end; ++i)
{
if (nums[i] < nums[start])
swap(nums[j++], nums[i]);
}
swap(nums[j], nums[end]);
return j;
}

int calc(int nums[], int start, int end, int k)
{
int idx = f3(nums, start, end, f2(nums, start, end));
int num = idx - start + 1;
if (num == k)
return idx;
else if (num > k)
return calc(nums, start, idx - 1, k);
else
return calc(nums, idx + 1, end, k - num);
}

int main()
{
int nums[] = { 9, 1, 2, 3, 1, 5, -1, 6, 8, -4 };
printf("%d", nums[calc(nums, 0, sizeof(nums) / sizeof(nums[0]) - 1, 5)]])
return 0;
}

请问代码执行后控制台输出的值为______。

第26题

请阅读以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>

const int M = 9;
int flag[M];

int find(int i)
{
if (i != flag[i])
flag[i] = find(flag[i]);
return flag[i];
}

void merge(int i, int j)
{
int fi = find(i);
int fj = find(j);
if (fi != fj)
flag[fi] = fj;
}

int calc(int data[M][M])
{
int s[M];
for (int i = 0; i < M; ++i){
flag[i] = i;
s[i] = 0;
}

for (int i = 0; i < M; ++i){
for (int j = 0; j < M; ++j){
if (data[i][j] > 0)
merge(i, j);
}
}

for (int i = 0; i < M; ++i){
s[find(i)]++;
}

int r = 0;
for (int i = 0; i < M; ++i){
if (r < s[i])
r = s[i];
}

return r;
}

int main(int argc, char* argv[])
{
int data[M][M] = {
{ 0, 2, 2, 0, 0, 5, 4, 0, 0 },
{ 2, 0, 2, 0, 0, 0, 6, 0, 0 },
{ 2, 2, 0, 1, 0, 5, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 0, 0, 7, 0 },
{ 0, 0, 0, 3, 0, 0, 0, 4, 0 },
{ 5, 0, 5, 0, 0, 0, 1, 0, 2 },
{ 4, 6, 4, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 7, 4, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 2, 0, 0, 0 }
};

printf("%d\n", calc(data));
return 0;
}

请问代码执行后控制台输出的值为______。

编程题

1. 查找子串

给定两个字符串s1和s2,如果s1删除若干个字符后能够变成s2, 则称s2是s1的子串,求s2在s1中起始位置的最大值。

输入描述:
只有一行,为s1和s2, s1和s2之间用空格隔开。
s1和s2都不会含有空格
s1和s2的长度均大于1且小于256

输出描述:
如果s2不是s1的子串,请输出数字0,否则请输出s2在s1中起始位置的最大值(初始位置为1)。

示例1:
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:

1
abcdacd ad

输出:

1
5

说明:

1
第1个字符和第4个字符组成的ad起始位置为1;第5个字符和第7个字符组成的ad起始位置为5,所以最大的起始位置为5。

2. 放他去修仙

放他去修仙是一款特别好玩的武侠修仙游戏,秘境探索是游戏的一大特色。随着修行者能力的提升,玩家也可以不断的探索新的奇山怪景,直至探索人人都向往的天外天。如今天地灵气聚集,无需自身修为即可自由出入各大仙境。
小G作为游戏的忠实玩家,非常期待去探索所有的地方,虽然没有了仙法的限制,但是每一条路都需要消耗一定的机缘。
小G为了尽量少的消耗机缘,每一个地点至多经过两次。那么要游览所有的地点,至少需要多少机缘呢?

输入描述:
第一行n,m。n(1<=n<=10),代表了仙境的编号和路径的数量。
接下来有m行,每行有a,b,c(1<=a,b<=n; 1<=c<=100),代表了仙境&到达仙境b需要消耗的机缘。

输出描述:
输出小G需要消耗的最小的机缘。如果无法游览所有的地点,输出-1。

示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:

1
2
3
3 2
1 2 5
1 3 1

输出:

1
6