CSP-J2021原题⽬及答案⼀、单项选择题(共15题,共计30分)
1.以下不属于⾯向对象程序设计语⾔的是()。
A.C++
B.Python
C.Ja va
D.C
正确答案是: D
2.以下奖项与计算机领域最相关的是()。
A.奥斯卡奖
B.图灵奖
C.诺贝尔奖
D.普利策奖
正确答案是: B
3.⽬前主流的计算机储存数据最终都是转换成()数据进⾏存储。
A.⼆进制
B.⼗进制
C.⼋进制
D.⼗六进制
正确答案是: A
4.以⽐较作为基本运算,在N个数中出最⼤数,最坏情况下所需要的最少的⽐较次数为()。
A.N2
B.N
C.N-1
D.N+1
正确答案是: C
5.对于⼊栈顺序为a,b,c,d,e的序列,下列()不是合法的出栈序列。
A.a,b,c,d,e
B.e,d,c,b,a
C.b,a,c,d,e
D.c,d,a,e,b
正确答案是: D
6.对于有n个顶点,m条边的⽆向连通图(m>n),需要删掉()条边才能使其称为⼀棵树。
A.n-1
B.m-n
C.m-n-1
D.m-n+1
正确答案是: D
7.⼆进制数101.11对应的⼗进制数是()。
A.6.5
B.5.5
C.5.75
D.5.25
正确答案是: C
8.如果⼀棵⼆叉树只有根结点,那么这棵⼆叉树⾼度为1。请问⾼度为5的完全⼆叉树有()种不同的形态?
A.16
B.15
C.17
D.32
正确答案是: A
9.表达式a*(b+c)*d的后缀表达式为(),其中“*”和“+”是运算符。
A.**a+bcd
B.abc+*d*
C.abc+d**
D.*a*+bcd
正确答案是: B
10.6个⼈,两个⼈组⼀队,总共组成三队,不区分队伍的编号,不同的组队情况有()。
A.10
B.15
C.30
D.20
正确答案是: B
11.在数据压缩编码种的哈夫曼编码⽅法,在本质是⼀种()的策略。
A.枚举
B.贪⼼
C.递归
D.动态规划
正确答案是: B
12.由1,1,2,2,3这五个数字组成不同的三位数有()种。
A.18
B.15
C.12
D.24
正确答案是: A
13.考虑如下递归算法
solve(n)
if n<=1 return 1
else if n>=5 return n*solve(n-2)
else return n*solve(n-1)
则调⽤solve(7)得到的返回结果为()。
A.105
B.840
C.210
D.420
正确答案是: C
14.以a为起点,对右边的⽆向图进⾏深度优先遍历,则b,c,d,e四个点中有可能作为最后⼀个遍历到的点的个数为()。
A.1
B.2
C.3
D.4
正确答案是: B
15.有四个⼈要从A点坐⼀条船过河到B点,船⼀开始在A点。该船⼀次最多可坐两个⼈。已知这四个⼈中每个⼈独⾃坐船的过河时间分别为1,2,4,8,且两个⼈坐船的过河时间为两⼈独⾃过河时间的较⼤者。则最短()时间可以让四个⼈过河到B点(包括从B点把船开回A点的时间)。
A.14
B.15
C.16
D.17
正确答案是: B
⼆、阅读程序(程序输⼊不超过数组或字符串定义的范围,共计40分)
PS:因为⽆法清晰打出√与×号,所以判断题⽤选择的⽅式呈现(和洛⾕⼀样)
(⼀)
01 #include <stdio.h>
02
03 int n;
04 int a[1000];
05
06 int f(int x)
07 {
08  int ret = 0;
09  for(; x; x &= x - 1) ret ++;
10  return ret;
11 }
12
13 int g(int x)
14 {
15  return x & - x;
16 }
17
18 int main()
19 {
20  scanf("%d", &n);
21  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22  for (int i = 0; i < n; i++)
23    printf("%d ", f(a[i]) + g(a[i]));
24  printf("\n");
25  return 0;
26 }
16.输⼊的n等于1001时,程序不会发⽣下标越界。这句话描述是否正确?
A.正确
B.错误
正确答案是: B
17.输⼊的a[i]必须全为正整数,否则程序将陷⼊死循环。这句话的描述是否正确?
A.正确
B.错误
正确答案是: B
18.当输⼊为“5 2 11 9 16 10”时,输出为“3 4 3 17 5”。这句话的描述是否正确?二叉树定义
A.正确
B.错误
正确答案是: B
19.当输⼊为“1 511998”时,输出为“18”。这句话的描述是否正确?
A.正确
B.错误
正确答案是: A
20.将源代码中g函数的定义(13-16⾏)移到main函数的后⾯,程序可以正常编译运⾏。这句话的描述是否正确?
A.正确
B.错误
正确答案是: B
21.当输⼊为“2 -65536 2147483647”时,输出为()
A."65532 33"
B."65552 32"
C."65535 34"
D."65554 33"
正确答案是: B
(⼆)
01 #include <cstdio.h>
02 #include <string.h>
03
04 char base[64];
05 char table[256];
06 char str[256];
07 char ans[256];
08
09 void init()
10 {
11  for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12  for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13  for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14  base[62] = '+', base[63] = '/';
15
16  for (int i = 0; i < 256; i++) table[i] = 0xff;
17  for (int i = 0; i < 64; i++) table[base[i]] = i;
18  table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23  char *ret = ans;
24  int i, len = strlen(str);
25  for (i = 0; i < len; i += 4){
26  (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27  if(str[i + 2] != '=')
28    (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29  if(str[i + 3] != '=')
30    (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31  }
32 }
33
34 int main()
35 {
36  init();
37  printf("%d\n", (int)table[0]);
38
39  scanf("%s", str);
40  decode(str);
41  print("%s\n", ans);
42  return 0;
43 }
22.输出的第⼆⾏⼀定是由⼩写字母、⼤写字母、数字和“+”、“/”、“=”构成的字符串。这句话的描述是否正确?
A.正确
B.错误

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。