CSP-J 2021 第一轮试题
CSP-J 2021 第一轮试题
- 场次:2021年CSP-J第1轮
- 考试时长:120 分钟
- 满分:100 分
- 题目来源:第三方来源(社区转写,非官方,仅供参考)
单项选择题
本分区标题为平台补的结构性占位,原卷(来源件)未收录。
以下不属于面向对象程序设计语言的是( )。
以下奖项与计算机领域最相关的是( )。
目前主流的计算机储存数据最终都是转换成( )数据进行储存。
以比较作为基本运算,在 N 个数中找出最大数,最坏情况下所需要的最少的比较次数为 ( )。
对于入栈顺序为 a,b,c,d,e 的序列,下列( )不是合法的出栈序列。
对于有 n 个顶点、m 条边的无向连通图 (m>n),需要删掉( )条边才能使其成为一棵树。
二进制数 101.11 对应的十进制数是( )。
如果一棵二叉树只有根结点,那么这棵二叉树高度为 1。请问高度为 5 的完全二叉树有 ( )种不同的形态?
表达式 a*(b+c)*d 的后缀表达式为( ),其中 * 和 + 是运算符。
6 个人,两个人组一队,总共组成三队,不区分队伍的编号。不同的组队情况有( )种。
在数据压缩编码中的哈夫曼编码方法,在本质上是一种( )的策略。
由 1,1,2,2,3 这五个数字组成不同的三位数有( )种。
考虑如下递归算法
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 为起点,对下边的无向图进行深度优先遍历,则 b,c,d,e 四个点中有可能作为最后一个遍历到的点的个数为( )。
有四个人要从 A 点坐一条船过河到 B 点,船一开始在 A 点。该船一次最多可坐两个人。 已知这四个人中每个人独自坐船的过河时间分别为 1,2,4,8,且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到 B 点(包括从 B 点把船开回 A 点的时间)。
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 × ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)
判断题正确填 √,错误填 ×
整组作答后提交批改,成绩计入掌握度 · 已答 0/6
原卷作答说明:判断题正确填 √,错误填 ×
#include <iostream>2using namespace std;34int n;5int a[1000];67int f(int x)8{9 int ret = 0;10 for (; x; x &= x - 1) ret++;11 return ret;12}1314int g(int x)15{16 return x & -x;17}1819int main()20{21 cin >> n;22 for (int i = 0; i < n; i++) cin >> a[i];23 for (int i = 0; i < n; i++)24 cout << f(a[i]) + g(a[i]) << ' ';25 cout << endl;26 return 0;27}- 16判断1.5 分
输入的 n 等于 1001 时,程序不会发生下标越界。( )
- 17判断1.5 分
输入的 a[i] 必须全为正整数,否则程序将陷入死循环。( )
- 18判断1.5 分
当输入为
5 2 11 9 16 10时,输出为3 4 3 17 5。( ) - 19判断1.5 分
当输入为
1 511998时,输出为18。( ) - 20判断1.5 分
将源代码中
g函数的定义(14∼17 行)移到 main 函数的后面,程序可以正常编译运行。( ) - 21单选3 分
单选题
- 当输入为
2 -65536 2147483647时,输出为( )。
A.
65532 33
B.65552 32
C.65535 34
D.65554 33 - 当输入为
整组作答后提交批改,成绩计入掌握度 · 已答 0/6
原卷作答说明:判断题正确填 √,错误填 ×
#include <iostream>2#include <string>3using namespace std;45char base[64];6char table[256];78void init()9{10 for (int i = 0; i < 26; i++) base[i] = 'A' + i;11 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;12 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;13 base[62] = '+', base[63] = '/';1415 for (int i = 0; i < 256; i++) table[i] = 0xff;16 for (int i = 0; i < 64; i++) table[base[i]] = i;17 table['='] = 0;18}1920string decode(string str)21{22 string ret;23 int i;24 for (i = 0; i < str.size(); i += 4) {25 ret += table[str[i]] << 2 | table[str[i + 1]] >> 4;26 if (str[i + 2] != '=')27 ret += (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;28 if (str[i + 3] != '=')29 ret += table[str[i + 2]] << 6 | table[str[i + 3]];30 }31 return ret;32}3334int main()35{36 init();37 cout << int(table[0]) << endl;3839 string str;40 cin >> str;41 cout << decode(str) << endl;42 return 0;43}- 22判断1.5 分
输出的第二行一定是由小写字母、大写字母、数字和 +、 /、= 构成的字符串。( )
- 23判断1.5 分
可能存在输入不同,但输出的第二行相同的情形。( )
- 24判断1.5 分
输出的第一行为 -1。( )
- 25单选3 分
单选题
- 设输入字符串长度为 n,
decode函数的时间复杂度为( )
- 设输入字符串长度为 n,
- 26单选3 分
当输入为 Y3Nx 时,输出的第二行为()。
- 27单选3.5 分
(3.5 分)当输入为 Y2NmIDIwMjE= 时,输出的第二行为( )。
整组作答后提交批改,成绩计入掌握度 · 已答 0/6
原卷作答说明:判断题正确填 √,错误填 ×
#include <iostream>2using namespace std;34const int n = 100000;5const int N = n + 1;67int m;8int a[N], b[N], c[N], d[N];9int f[N], g[N];1011void init()12{13 f[1] = g[1] = 1;14 for (int i = 2; i <= n; i++) {15 if (!a[i]) {16 b[m++] = i;17 c[i] = 1, f[i] = 2;18 d[i] = 1, g[i] = i + 1;19 }20 for (int j = 0; j < m && b[j] * i <= n; j++) {21 int k = b[j];22 a[i * k] = 1;23 if (i % k == 0) {24 c[i * k] = c[i] + 1;25 f[i * k] = f[i] / c[i * k] * (c[i * k] + 1);26 d[i * k] = d[i];27 g[i * k] = g[i] * k + d[i];28 break;29 }30 else {31 c[i * k] = 1;32 f[i * k] = 2 * f[i];33 d[i * k] = g[i];34 g[i * k] = g[i] * (k + 1);35 }36 }37 }38}3940int main()41{42 init();4344 int x;45 cin >> x;46 cout << f[x] << ' ' << g[x] << endl;47 return 0;48}- 28判断1.5 分
若输入不为 1,把第 13 行删去不会影响输出的结果。( )
- 29判断2 分
(2 分) 第 25 行的
f[i] / c[i * k]可能存在无法整除而向下取整的情况。 ( ) - 30判断2 分
(2 分) 在执行完
init()后,f数组不是单调递增的,但g数组是单调递增的。 ( ) - 31单选3 分
单选题
init函数的时间复杂度为( )。
- 32单选3 分
在执行完
init()后,f[1],f[2],f[3]…f[100] 中有()个等于 2。 - 33单选4 分
(4 分) 当输入为 1000 时,输出为()。
三、完善程序(单选题,每小题 3 分,共计 30 分)
整组作答后提交批改,成绩计入掌握度 · 已答 0/5
(1)(Josephus 问题) 有 n 个人围成一个圈,依次标号 0 至 n−1。从 0 号开始,依次 0,1,0,1,… 交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。
试补全模拟程序。
#include <iostream>23using namespace std;45const int MAXN = 1000000;6int F[MAXN];78int main() {9 int n;10 cin >> n;11 int i = 0, p = 0, c = 0;12 while (①) {13 if (F[i] == 0) {14 if (②) {15 F[i] = 1;16 ③;17 }18 ④;19 }20 ⑤;21 }22 int ans = -1;23 for (i = 0; i < n; i++)24 if (F[i] == 0)25 ans = i;26 cout << ans << endl;27 return 0;28}- 34(①)单选空位 ①3 分
①处应填( )
A.i < n
B.c < n
C.i < n- 1
D.c < n-1 - 35(②)单选空位 ②3 分
②处应填( )
A.i % 2 == 0
B.i % 2 == 1
C.p
D.!p - 36(③)单选空位 ③3 分
③处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1 - 37(④)单选空位 ④3 分
④处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1 - 38(⑤)单选空位 ⑤3 分
⑤处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1
整组作答后提交批改,成绩计入掌握度 · 已答 0/5
( 2 ) (矩形计数) 平面上有 n 个关键点,求有多少个四条边都和 x 轴或者 y 轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复,但完全重合的矩形只计一 次。
试补全枚举算法。
#include <iostream>23using namespace std;45struct point {6 int x, y, id;7};89bool equals(point a, point b) {10 return a.x == b.x && a.y == b.y;11}1213bool cmp(point a, point b) {14 return ①;15}1617void sort(point A[], int n) {18 for (int i = 0; i < n; i++)19 for (int j = 1; j < n; j++)20 if (cmp(A[j], A[j - 1])) {21 point t = A[j];22 A[j] = A[j - 1];23 A[j - 1] = t;24 }25}2627int unique(point A[], int n) {28 int t = 0;29 for (int i = 0; i < n; i++)30 if (②)31 A[t++] = A[i];32 return t;33}3435bool binary_search(point A[], int n, int x, int y) {36 point p;37 p.x = x;38 p.y = y;39 p.id = n;40 int a = 0, b = n - 1;41 while (a < b) {42 int mid = ③;43 if (④)44 a = mid + 1;45 else46 b = mid;47 }48 return equals(A[a], p);49}5051const int MAXN = 1000;52point A[MAXN];5354int main() {55 int n;56 cin >> n;57 for (int i = 0; i < n; i++) {58 cin >> A[i].x >> A[i].y;59 A[i].id = i;60 }61 sort(A, n);62 n = unique(A, n);63 int ans = 0;64 for (int i = 0; i < n; i++)65 for (int j = 0; j < n; j++)66 if (⑤ && binary_search(A, n, A[i].x, A[j].y) &&67 binary_search(A, n, A[j].x, A[i].y)) {68 ans++;69 }70 cout << ans << endl;71 return 0;72}- 39(①)单选空位 ①3 分
①处应填 ( )
- 40(②)单选空位 ②3 分
②处应填 ( )
- 41(③)单选空位 ③3 分
③处应填 ( )
- 42(④)单选空位 ④3 分
④处应填 ( )
- 43(⑤)单选空位 ⑤3 分
⑤处应填 ( )