#19. CSP-J 2026 第一轮模拟赛(第 09 套)
CSP-J 2026 第一轮模拟赛(第 09 套)
CSP-J 2026 第一轮模拟赛(第 09 套)
满分:100 分 建议用时:120 分钟
所有题目均为单项选择题。判断题中,
T表示正确,F表示错误。未作答按 0 分计算。
一、单项选择题(共 15 题,每题 2 分,共 30 分)
第 1 题(2 分)
十进制整数 64 转换为二进制数,结果是( )。
{{ select(1) }}
100000010000101111111000001
第 2 题(2 分)
十六进制数 (57)₁₆ 对应的十进制数是( )。
{{ select(2) }}
- 93
- 87
- 99
- 79
第 3 题(2 分)
设 int a=27, b=29, c=4; 表达式 (a & b) ^ c 的值是( )。
{{ select(3) }}
- 30
- 31
- 29
- 33
第 4 题(2 分)
一幅 80×32 的黑白位图,每个像素只需 1 bit,不考虑文件头,至少需要( )字节存储。
{{ select(4) }}
3201606402560
第 5 题(2 分)
关于程序的编译与运行,下列说法正确的是( )。
{{ select(5) }}
- 编译器只能检查程序运行结果是否正确,不能发现语法错误。
- 源程序只要保存为 .cpp 文件,就一定可以被 CPU 直接执行。
C++ 源程序通常需要先经过编译、链接,生成可执行程序后才能运行。- 链接过程发生在程序每一次循环执行之后。
第 6 题(2 分)
关于计算机网络,下列说法正确的是( )。
{{ select(6) }}
- TCP 是一种图像压缩格式。
- IP 地址只用于标识网页文件名。
- DNS 的主要作用之一是把域名解析为 IP 地址。
- HTTP 负责把域名转换为 IP 地址。
第 7 题(2 分)
一个初始为空的栈依次执行 push(12)、push(14)、pop()、push(16),此时栈顶元素是( )。
{{ select(7) }}
- 栈为空
- 14
- 12
- 16
第 8 题(2 分)
一棵含 25 个结点的树共有( )条边。
{{ select(8) }}
- 26
- 48
- 25
- 24
第 9 题(2 分)
一个含 15 个顶点的无向连通图,边数至少为( )。
{{ select(9) }}
- 13
- 15
- 14
105
第 10 题(2 分)
关于快速排序,下列说法正确的是( )。
{{ select(10) }}
平均时间复杂度为 O(n log n),最坏可达到 O(n²)。- 它不能用于整数序列。
它在任何情况下都只需 O(n) 时间。它一定需要 O(n²) 的额外存储空间。
第 11 题(2 分)
在含 31 个互不相同且已升序排列的元素中,用标准二分查找成功查找一个元素,最多进行( )次关键字比较。
{{ select(11) }}
- 5
- 4
- 31
- 6
第 12 题(2 分)
下面程序片段的时间复杂度是( )。
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
x++;
{{ select(12) }}
O(log n)O(n)O(2ⁿ)O(n²)
第 13 题(2 分)
从 15 名同学中任选 2 名组成一组,共有( )种不同选法。
{{ select(13) }}
- 30
21032768105
第 14 题(2 分)
执行 int x=47, y=4; cout << x / y + x % y;,输出是( )。
{{ select(14) }}
- 15
- 14
- 17
- 12
第 15 题(2 分)
解决“在有序数组中不断舍弃一半搜索区间”时,最符合描述的方法是( )。
{{ select(15) }}
- 选择排序
- 深度优先搜索(DFS)
- 枚举所有排列
- 二分查找
二、阅读程序(共 18 题,共 40 分)
阅读下列程序。判断题请选择
T或F,其他题请选择A、B、C、D。
程序 1:最长连续字符段(第 16~21 题)
输入为非空字符串。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int best = 1, cur = 1;
char who = s[0];
for (int i = 1; i < (int) s.size(); ++i) {
if (s[i] == s[i - 1])
++cur;
else
cur = 1;
if (cur > best) {
best = cur;
who = s[i];
}
}
cout << who << " " << best << "\n";
}
第 16 题(1 分)
程序寻找最长连续相同字符段。
{{ select(16) }}
- T
- F
第 17 题(1.5 分)
若有多个最长段,程序输出最后出现的最长段字符。
{{ select(17) }}
- T
- F
第 18 题(1.5 分)
输入字符串不能为空,否则访问 s[0] 有问题。
{{ select(18) }}
- T
- F
第 19 题(3 分)
输入:
aabbbccbbb
输出是( )。
{{ select(19) }}
b 6b 3c 2a 2
第 20 题(3 分)
输入:
xyz
输出是( )。
{{ select(20) }}
z 1z 3x 1x 3
第 21 题(3 分)
程序的时间复杂度为( )。
{{ select(21) }}
O(log n)O(1)O(n)O(n²)
程序 2:后继指针遍历(第 22~27 题)
0 表示链结束。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, s;
cin >> n >> s;
vector<int> nxt(n + 1);
for (int i = 1; i <= n; i++)
cin >> nxt[i];
vector<int> vis(n + 1, 0);
int cnt = 0;
while (s != 0 && !vis[s]) {
vis[s] = 1;
++cnt;
s = nxt[s];
}
cout << cnt << " " << s << "\n";
}
第 22 题(1.5 分)
nxt 数组可看作每个结点唯一指向的下一个结点。
{{ select(22) }}
- T
- F
第 23 题(1.5 分)
vis 用于防止进入环后无限循环。
{{ select(23) }}
- T
- F
第 24 题(1.5 分)
输出的 s 一定为0。
{{ select(24) }}
- T
- F
第 25 题(3 分)
输入:
5 1
2 3 4 5 0
输出是( )。
{{ select(25) }}
4 05 14 55 0
第 26 题(3 分)
输入:
4 1
2 3 2 0
输出是( )。
{{ select(26) }}
2 24 03 23 0
第 27 题(3 分)
循环最多执行( )次。
{{ select(27) }}
- n
log n- n²
- 1
程序 3:递归回文判断(第 28~33 题)
输入为非空字符串。
#include <bits/stdc++.h>
using namespace std;
bool pal(const string &s, int l, int r) {
if (l >= r)
return true;
if (s[l] != s[r])
return false;
return pal(s, l + 1, r - 1);
}
int main() {
string s;
cin >> s;
cout << (pal(s, 0, s.size() - 1) ? "YES" : "NO") << "\n";
}
第 28 题(1.5 分)
函数 pal 递归判断区间 s[l..r] 是否回文。
{{ select(28) }}
- T
- F
第 29 题(1.5 分)
长度0或1的区间被视为回文。
{{ select(29) }}
- T
- F
第 30 题(1.5 分)
每次递归只移动左端点。
{{ select(30) }}
- T
- F
第 31 题(3 分)
输入:
abccba
输出是( )。
{{ select(31) }}
- 6
- 0
YES- NO
第 32 题(3 分)
输入:
abca
第一次字符比较结果是( )。
{{ select(32) }}
- 相等
- 越界
- 没有比较
- 不等
第 33 题(3 分)
时间复杂度为( )。
{{ select(33) }}
O(log n)O(1)O(n)O(n²)
三、完善程序(共 10 题,每题 3 分,共 30 分)
阅读程序说明和代码。代码中的横线表示待填空位置,请从对应的四个选项中选择最合适的一项。
完善程序(一):计数排序(第 34~38 题)
功能说明: 对取值范围为 0~100 的整数序列进行升序排序。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int cnt[101] = {};
for (int i = 0, x; i < n; ++i) {
cin >> x;
________(1)________;
}
for (int x = 0; x <= 100; ++x) {
while (________(2)________) {
cout << ________(3)________ << ' ';
________(4)________;
}
}
return ________(5)________;
}
第 34 题(3 分)
空(1)应填入( )。
{{ select(34) }}
x++cnt[x]++cnt[i]++cnt[0]++
第 35 题(3 分)
空(2)应填入( )。
{{ select(35) }}
n>0cnt[x]==0cnt[x]>0x<n
第 36 题(3 分)
空(3)应填入( )。
{{ select(36) }}
incnt[x]x
第 37 题(3 分)
空(4)应填入( )。
{{ select(37) }}
n--cnt[x]--cnt[x]++x++
第 38 题(3 分)
空(5)应填入( )。
{{ select(38) }}
0ncnt[0]1
完善程序(二):子集和判定(第 39~43 题)
功能说明: 给定若干正整数,判断是否存在一个子集,使其中元素之和等于 T。
#include <bits/stdc++.h>
using namespace std;
int n, T, a[25];
bool dfs(int p, int sum) {
if (sum == T)
return ________(1)________;
if (p == n || sum > T)
return ________(2)________;
if (dfs(________(3)________, sum))
return true;
return dfs(p + 1, ________(4)________);
}
int main() {
cin >> n >> T;
for (int i = 0; i < n; ++i)
cin >> a[i];
cout << (dfs(________(5)________, 0) ? "YES" : "NO") << '\n';
return 0;
}
第 39 题(3 分)
空(1)应填入( )。
{{ select(39) }}
sum0truefalse
第 40 题(3 分)
空(2)应填入( )。
{{ select(40) }}
Tptruefalse
第 41 题(3 分)
空(3)应填入( )。
{{ select(41) }}
np0p+1
第 42 题(3 分)
空(4)应填入( )。
{{ select(42) }}
a[p]sum+a[p]T-sumsum
第 43 题(3 分)
空(5)应填入( )。
{{ select(43) }}
01nT