不是VIP会员,不能显示答案,请在后台“我的信息” 在线升级 VIP

一、单项选择题 (共 20 题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项)

1. 计算机中央处理器简称为( )。

  • A.RAM
  • B.GPU
  • C.CPU
  • D.PUA

2. 下列IP地址格式正确的是( )。

  • A.4008-123-456
  • B.192.168.0.284
  • C.www.bilibili.com
  • D.fe80::14c6:3a5b:e5af:926e

3. 要将数组{7,1,5,3,8,2,6,4}中的元素从小到大排列,每次操作可以选择一个元素取出,然后将该元素插入到另一个位置,最少需要操作( )次。

  • A.4
  • B.5
  • C.6
  • D.7

4. 以下Linux命令中,( )可以用于显示访问一个主机需要经过的路由器。

  • A.tracert
  • B.nslookup
  • C.arp
  • D.netstat

5. 将crosssea这8个字母按顺序推入栈中,则有( )种出栈顺序可以使出栈序列仍然是crosssea。

  • A.1
  • B.3
  • C.5
  • D.6

6. 如果使用左儿子右兄弟表示法将一棵有根树T转换为二叉树T’,那么T’的后序遍历序 列一定与T的( )序列相同。

  • A.先序遍历
  • B.中序遍历
  • C.后序遍历
  • D.层序遍历

7. 将(123456789ABCDEF) 16转换成二进制后,一共有( )位为1。

  • A.30
  • B.32
  • C.34
  • D.36

8. 在RSA中,( )可以用于解密一条密文。

  • A.发送者的私钥
  • B.发送者的公钥
  • C.接收者的私钥
  • D.接收者的公钥

9. 下列三个表达式中,和 a^b 等价的表达式有( )个。 (1).(a|b)&~(a&b) (2).(a&~b)|(~a&b) (3).(a|~b)&(~a|b)

  • A.0
  • B.1
  • C.2
  • D.3

10. 2n个白色的位置排成一排,等概率随机将n个不同的位置染黑。若两个相邻的格子颜色相同,则认为这两个格子在一个同色连通块内。在这种条件下,同色连通块期望有( )个。

  • A.n-1
  • B.n
  • C.n+1
  • D.n*(n-1)/(n+1)

11. 在C++语言中,表达式(5/2)+(-5/4)的值是( )。

  • A.-1
  • B.0
  • C.1
  • D.1.25

12. 字符串queue有( )个本质不同的非空子序列。

  • A.16
  • B.23
  • C.24
  • D.31

13. ( )不是NP-Complete问题。

  • A.最少叶子生成树问题
  • B.最多叶子生成树问题
  • C.最短直径生成树问题
  • D.最长直径生成树问题

14. 由n个无序元素创建二叉堆的最优时间复杂度是( )。

  • A.Θ(log(n))
  • B.Θ(n)
  • C.Θ(n*log(n))
  • D.Θ(n^2)

15. 3114514 mod 7 = ( )。

  • A.4
  • B.3
  • C.0
  • D.6

16. 一张简单图的邻接矩阵为{{0,0,1},{0,0,0},{1,0,0}}},以下说法正确的是( )。

  • A.这张图不可能为无向图
  • B.图中只有一个连通块
  • C.图中存在一条哈密顿路径
  • D.图中存在一条欧拉路径

17. 一棵树的某个DFS序为{1,2,3,4,5},某个BFS序为{1,2,4,3,5},则以下说法错误的是( )。

  • A.这棵树一定为一条链
  • B.1号点和2号点之间一定有一条边
  • C.5号点一定为叶子
  • D.某种情况下,这棵树的BFS序也可以为 {1,2,3,4,5}

18. 已知T(n)=T(√n)+ Θ(1)(n>=2), T(1)= Θ(1),那么有( )。

  • A.T(n)=Θ(log(log(n)))
  • B.T(n)=Θ(√n)
  • C.T(n)=Θ(log(n))
  • D.T(n)=Θ((log(n))^2)

19. 有( )种方式选择凸六边形的三条互不相交的对角线。

  • A.10
  • B.12
  • C.14
  • D.16

20. 设f(x)为x在十进制下各位数之和,且f0(x)=x,fi(x)=f(f i-1(x))(i>=1),那么f2023(2^2023)=( )

  • A.2
  • B.0
  • C.9
  • D.3

二、程序阅读理解题(共 3大题,每大题分判断题和选择题,判断题每题1.5分,选择题每题4 分,共计40分)

1.

#include <iostream>
using namespace std;

const int N = 1001;

int n, a[N], s[N][N];

int main() {
cin >> n;
for(int i = 1; i <= n; i += 1)
cin >> a[i];
for(int i = 2; i <= n; i += 1)
for(int j = 1; j + i - 1 <= n; j += 1) {
int L = j, R = j + i - 1;
s[L][R] = s[L + 1][R] + s[L][R - 1] - s[L + 1][R - 1] + (a[L] > a[R]);
}
for(int i = 1; i <= n; i += 1)
for(int j = i; j <= n; j += 1)
cout << s[i][j] << endl;
}


判断题

1) 如果输入n的值为1000,并且1 <= a[i] <= n,程序不会发生运行错误。( )
2) 该程序时间复杂度为Θ(n^2)。( )
3) 第12行将循环初始条件修改为i = 1, 程序对于n = 1000的数据能够正确输出。( )


选择题

4) 当n = 10时,第14行会被执行( )次。
5) 当n = 5,a数组对应输入数据为:{1,3,5,3,4},则下列选项说法正确的是( )。

2.

#include <iostream>
using namespace std;

const int N = 1001;

int n, a[N];

int ans = 0;

void dfs(int L, int R) {
if(L > R)
return;
int p = L;
for(int i = L + 1; i <= R; i += 1)
if(a[i] < a[p])
p = i;
ans += (p - L + 1) * (R - p + 1) * a[p];
dfs(L, p - 1);
dfs(p + 1, R);
}

int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i += 1)
cin >> a[i];
dfs(1, n);
cout << ans << endl;
}

判断题

1) 如果输入n = 1000, 所有的a[i] = 100000,程序不会产生整形溢出。( )
2) 将第11行改为if(L >= R) 程序仍然可以计算出相同的结果。( )
3) 当n = 4, a = {1, 2, 4, 3}时,输出为20。( )

选择题

4) 该程序的最劣复杂度为( )。
5) 该程序在a为1,2,…,n的随机排列时,时间复杂度的期望为( )。

3.

#include <iostream>
using namespace std;

const int N = 100001;

int n, a[N];

int check(int a, int b, int c) {
return (a <= c && c <= b) || (b <= c && c <= a);
}

int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i += 1) {
cin >> a[i];
a[i] += a[i - 1];
}
int q;
cin >> q;
while(q--) {
int L, R;
cin >> L >> R;
int target = (a[L] + a[R]) / 2;
int pos = -1;
while(L != R) {
int mid = (L + R) / 2;
if(a[mid] == target) {
pos = mid;
break;
}
if(check(a[L], a[mid - 1], target))
R = mid - 1;
else
L = mid + 1;
}
if(pos == -1)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
}

判断题

1) 该算法的时间复杂度为Θ((n+q)*log(n))。( )
2) 程序输出NO时,代表不存在l<=x<=r,使得a[x]=target。( )。

选择题

3) 当输入的n = 3,输入的a[i]分别为2,3,1, q=2, 两组询问分别为L=2,R=3和L=1,R=3时,输出的是( )。
4) 当输入的n = 100,输入的a[i]当i为奇数时为-1,偶数时为1, q=2, 两组询问分别为L=1,R=100和L=30,R=40时,输出的是( )。
5) 当a满足以下哪种条件时,程序总是输出YES( )。

三、程序完善题(共 2题,每题5个选择题,每个选择题3分,共计 30分)

1. (水仙花数问题)给定一个n <= 15,令所有十进制下长度为n的数,其各数位的n次方之和等于这个数本身,我们称这个数为水仙花数,例如当n = 3, 153 = 1^3 + 5^3 + 3^3。当n = 4, 1634 = 1^4 + 6^4 + 3^4 + 4^4。
你需要求出所有n位的水仙花数的和。

#include <cstdio>
using namespace std;

long long cost[10], ans;

int cnt[10], t[10], n;

void dfs(int rest, int now, long long current) {
if (rest == 0) {
long long temp = current;
for (int i = 0; i < 10; i++)
t[i] = 0;
while (temp > 0) {
++t[temp % 10];
temp /= 10;
}
bool flag = 1;
for (int i = 0; i < 10; i++)
if (cnt[i] != t[i]) {
flag = 0;
break;
}
if (flag) {
__(1)__;
}
return;
}
if ( __(2)__ ) {
return;
}
for (cnt[now] = 0; cnt[now] <= rest; cnt[now]++)
dfs(rest - cnt[now], now + 1, __(3)__ );
cnt[now] = 0;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < 10; i++) {
cost[i] = 1;
for (int j = 0; j < n; j++)
__(4)__ ;
}
dfs( __(5)__ );
printf("%lld\n",ans);
return 0;
}

选择题

1) ⑴处应填( )。
2) ⑵处应填( )。
3) ⑶处应填( )。
4) ⑷处应填( )。
5) ⑸处应填( )。

2. (修改序列问题)
给定长度为n的序列a,定义b[i]=a[1]^a[2]^…^a[i],其中^为异或运算。每次操作你可以将序列a中任意一个元素修改为任意数,求最少几次操作可以使得b序列单调不降。
数据范围:n <= 10^6,0 <= a[i] <= 10^9。
提示:贪心,维护每一位可能的取值。

#include <iostream>
using namespace std;

const int N = 1000001;

int n, a[N], sta[30];

int main() {
cin >> n;
for(int i = 1; i <= n; i += 1)
cin >> a[i];
for(int i = 0; i < 30; i += 1)
__(1)__ ;
int ans = 0;
for(int i = 1; i <= n; i += 1)
{
int msb = __(2)__ ;
for(int j = 29; j >= 0; j -= 1) {
if( __(3)__ ) {
msb = j;
break;
}
}
if(msb == -1)
continue;
if(sta[msb] == 1) {
ans += 1;
fill(sta, sta + 30, __(4)__ );
} else {
for(int j = 0; j < 30; j += 1)
if(sta[j] != -1)
sta[j] ^= (a[i] >> j & 1);
__(5)__;
}
}
cout << ans << endl;
}

选择题

1) ⑴处应填( )。
2) ⑵处应填( )。
3) ⑶处应填( )。
4) ⑷处应填( )。
5) ⑸处应填( )。