#17. CSP-J 2026 第一轮模拟赛(第 07 套)
CSP-J 2026 第一轮模拟赛(第 07 套)
CSP-J 2026 第一轮模拟赛(第 07 套)
满分:100 分 建议用时:120 分钟
所有题目均为单项选择题。判断题中,
T表示正确,F表示错误。未作答按 0 分计算。
一、单项选择题(共 15 题,每题 2 分,共 30 分)
第 1 题(2 分)
十进制整数 58 转换为二进制数,结果是( )。
{{ select(1) }}
111001111010111100111011
第 2 题(2 分)
十六进制数 (4D)₁₆ 对应的十进制数是( )。
{{ select(2) }}
- 69
- 89
- 83
- 77
第 3 题(2 分)
设 int a=25, b=25, c=6; 表达式 (a & b) ^ c 的值是( )。
{{ select(3) }}
- 32
- 35
- 31
- 33
第 4 题(2 分)
一幅 112×40 的黑白位图,每个像素只需 1 bit,不考虑文件头,至少需要( )字节存储。
{{ select(4) }}
11204480280560
第 5 题(2 分)
关于程序的编译与运行,下列说法正确的是( )。
{{ select(5) }}
- 源程序只要保存为 .cpp 文件,就一定可以被 CPU 直接执行。
- 编译器只能检查程序运行结果是否正确,不能发现语法错误。
- 程序运行时出现除零错误属于运行时错误,而不是语法错误。
- 链接过程发生在程序每一次循环执行之后。
第 6 题(2 分)
关于计算机网络,下列说法正确的是( )。
{{ select(6) }}
- IP 协议保证所有数据绝不丢失。
DNS 用于编译 C++ 程序。- MAC 地址是网页的网址。
HTTP/HTTPS 常用于浏览器与 Web 服务器之间传输网页资源。
第 7 题(2 分)
一个初始为空的栈依次执行 push(10)、push(12)、pop()、push(14),此时栈顶元素是( )。
{{ select(7) }}
- 栈为空
- 12
- 10
- 14
第 8 题(2 分)
一棵含 21 个结点的树共有( )条边。
{{ select(8) }}
- 40
- 20
- 22
- 21
第 9 题(2 分)
一个含 13 个顶点的无向连通图,边数至少为( )。
{{ select(9) }}
- 78
- 13
- 11
- 12
第 10 题(2 分)
关于冒泡排序,下列说法正确的是( )。
{{ select(10) }}
- 它不能用于整数序列。
它在任何情况下都只需 O(n) 时间。它一定需要 O(n²) 的额外存储空间。- 相邻元素交换实现,通常可以稳定排序。
第 11 题(2 分)
在含 127 个互不相同且已升序排列的元素中,用标准二分查找成功查找一个元素,最多进行( )次关键字比较。
{{ select(11) }}
- 8
- 6
- 7
127
第 12 题(2 分)
下面程序片段的时间复杂度是( )。
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
x++;
{{ select(12) }}
O(n)O(2ⁿ)O(log n)O(n²)
第 13 题(2 分)
从 13 名同学中任选 2 名组成一组,共有( )种不同选法。
{{ select(13) }}
- 78
1568192- 26
第 14 题(2 分)
执行 int x=41, y=5; cout << x / y + x % y;,输出是( )。
{{ select(14) }}
- 12
- 9
- 10
- 7
第 15 题(2 分)
解决“反复把问题分成规模更小、结构相同的子问题”时,最符合描述的方法是( )。
{{ select(15) }}
- 递归
- 枚举所有排列
- 选择排序
- 深度优先搜索(DFS)
二、阅读程序(共 18 题,共 40 分)
阅读下列程序。判断题请选择
T或F,其他题请选择A、B、C、D。
程序 1:矩阵双对角线求和(第 16~21 题)
矩阵为 n×n。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> a(n, vector<int>(n));
for (auto &row : a)
for (int &x : row)
cin >> x;
long long s = 0;
for (int i = 0; i < n; ++i) {
s += a[i][i];
if (i != n - 1 - i)
s += a[i][n - 1 - i];
}
cout << s << "\n";
}
第 16 题(1 分)
程序计算主对角线与副对角线元素之和。
{{ select(16) }}
- T
- F
第 17 题(1.5 分)
当 n 为奇数时,中心元素只会加一次。
{{ select(17) }}
- T
- F
第 18 题(1.5 分)
当 n 为偶数时,两条对角线没有公共格子。
{{ select(18) }}
- T
- F
第 19 题(3 分)
输入 3 阶矩阵 1 2 3 / 4 5 6 / 7 8 9,输出是( )。
{{ select(19) }}
- 25
- 30
- 35
- 20
第 20 题(3 分)
输入 2 阶矩阵 1 2 / 3 4,输出是( )。
{{ select(20) }}
- 12
- 7
- 5
- 10
第 21 题(3 分)
程序读取矩阵的时间复杂度为( )。
{{ select(21) }}
O(n²)O(n)O(n³)O(1)
程序 2:归并两个有序数组(第 22~27 题)
阅读程序。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> a(n), b(m), c;
for (int &x : a)
cin >> x;
for (int &x : b)
cin >> x;
int i = 0, j = 0;
while (i < n || j < m) {
if (j == m || (i < n && a[i] <= b[j]))
c.push_back(a[i++]);
else
c.push_back(b[j++]);
}
for (int x : c)
cout << x << ' ';
}
第 22 题(1.5 分)
程序要求 a 与 b 都已按非递减顺序排列。
{{ select(22) }}
- T
- F
第 23 题(1.5 分)
输出序列长度为 n+m。
{{ select(23) }}
- T
- F
第 24 题(1.5 分)
当 a[i]==b[j] 时先取 b[j]。
{{ select(24) }}
- T
- F
第 25 题(3 分)
输入:
3 4
1 4 6
2 4 5 9
输出是( )。
{{ select(25) }}
1 2 4 5 6 91 2 4 4 5 6 91 4 6 2 4 5 92 4 5 9 1 4 6
第 26 题(3 分)
归并部分时间复杂度为( )。
{{ select(26) }}
O(n+m)O(1)O(log(n+m))O(nm)
第 27 题(3 分)
若 a、b 中有重复值,程序会( )。
{{ select(27) }}
- 陷入死循环
- 删除重复值
- 保留所有重复值
- 只保留a中的重复值
程序 3:有根树先序遍历(第 28~33 题)
结点编号满足父结点在孩子之前输入。
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> ch;
void dfs(int u) {
cout << u << ' ';
for (int v : ch[u])
dfs(v);
}
int main() {
int n;
cin >> n;
ch.resize(n + 1);
for (int v = 2; v <= n; v++) {
int p;
cin >> p;
ch[p].push_back(v);
}
dfs(1);
}
第 28 题(1.5 分)
输入给出结点2到n的父结点。
{{ select(28) }}
- T
- F
第 29 题(1.5 分)
dfs 输出的是先访问父结点再访问孩子的先序次序。
{{ select(29) }}
- T
- F
第 30 题(1.5 分)
程序适用于任意含环有向图。
{{ select(30) }}
- T
- F
第 31 题(3 分)
输入:
5
1 1 2 2
输出是( )。
{{ select(31) }}
1 2 3 4 51 2 4 5 34 5 2 3 11 3 2 4 5
第 32 题(3 分)
树中共存储的父子边数是( )。
{{ select(32) }}
- n
- 2n
- 0
n-1
第 33 题(3 分)
递归深度最坏为( )。
{{ select(33) }}
- n²
- 1
log n- 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)________;
}
int best = ________(2)________;
for (int x = 1; x <= 100; ++x) {
if (________(3)________)
best = ________(4)________;
}
cout << best << ' ' << ________(5)________ << '\n';
return 0;
}
第 34 题(3 分)
空(1)应填入( )。
{{ select(34) }}
x++cnt[x]++best=xcnt[i]++
第 35 题(3 分)
空(2)应填入( )。
{{ select(35) }}
10n100
第 36 题(3 分)
空(3)应填入( )。
{{ select(36) }}
cnt[x]==0cnt[x]>=cnt[best]cnt[x]>cnt[best]x>best
第 37 题(3 分)
空(4)应填入( )。
{{ select(37) }}
xcnt[x]0best+1
第 38 题(3 分)
空(5)应填入( )。
{{ select(38) }}
cnt[best]cnt[0]nbest
完善程序(二):最长严格递增连续段(第 39~43 题)
功能说明: 求最长严格递增连续子段的长度。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int &x : a)
cin >> x;
int cur = ________(1)________;
int best = ________(2)________;
for (int i = 1; i < n; ++i) {
if (________(3)________)
________(4)________;
else
cur = 1;
best = ________(5)________;
}
cout << best << '\n';
return 0;
}
第 39 题(3 分)
空(1)应填入( )。
{{ select(39) }}
01na[0]
第 40 题(3 分)
空(2)应填入( )。
{{ select(40) }}
1a[0]n0
第 41 题(3 分)
空(3)应填入( )。
{{ select(41) }}
i>na[i]<a[i-1]a[i]>a[i-1]a[i]>=a[i-1]
第 42 题(3 分)
空(4)应填入( )。
{{ select(42) }}
cur=0best++--cur++cur
第 43 题(3 分)
空(5)应填入( )。
{{ select(43) }}
best+curmin(best,cur)curmax(best,cur)