#18. CSP-J 2026 第一轮模拟赛(第 08 套)
CSP-J 2026 第一轮模拟赛(第 08 套)
CSP-J 2026 第一轮模拟赛(第 08 套)
满分:100 分 建议用时:120 分钟
所有题目均为单项选择题。判断题中,
T表示正确,F表示错误。未作答按 0 分计算。
一、单项选择题(共 15 题,每题 2 分,共 30 分)
第 1 题(2 分)
十进制整数 61 转换为二进制数,结果是( )。
{{ select(1) }}
111110111100111111111101
第 2 题(2 分)
十六进制数 (52)₁₆ 对应的十进制数是( )。
{{ select(2) }}
- 74
- 82
- 88
- 94
第 3 题(2 分)
设 int a=26, b=27, c=3; 表达式 (a & b) ^ c 的值是( )。
{{ select(3) }}
- 26
- 27
- 29
- 25
第 4 题(2 分)
一幅 64×48 的黑白位图,每个像素只需 1 bit,不考虑文件头,至少需要( )字节存储。
{{ select(4) }}
3841927683072
第 5 题(2 分)
关于程序的编译与运行,下列说法正确的是( )。
{{ select(5) }}
- 链接过程发生在程序每一次循环执行之后。
- 源程序只要保存为 .cpp 文件,就一定可以被 CPU 直接执行。
- 编译器只能检查程序运行结果是否正确,不能发现语法错误。
- 链接阶段会把目标文件与所需库代码组合成可执行文件。
第 6 题(2 分)
关于计算机网络,下列说法正确的是( )。
{{ select(6) }}
- HTTP 只能在局域网中使用。
- DNS 是一种排序算法。
- UDP 是无连接的传输层协议,通常不保证可靠到达。
- TCP 完全不需要建立连接。
第 7 题(2 分)
一个初始为空的栈依次执行 push(11)、push(13)、pop()、push(15),此时栈顶元素是( )。
{{ select(7) }}
- 13
- 11
- 栈为空
- 15
第 8 题(2 分)
一棵含 23 个结点的树共有( )条边。
{{ select(8) }}
- 22
- 24
- 23
- 44
第 9 题(2 分)
一个含 14 个顶点的无向连通图,边数至少为( )。
{{ select(9) }}
- 91
- 14
- 12
- 13
第 10 题(2 分)
关于选择排序,下列说法正确的是( )。
{{ select(10) }}
- 它不能用于整数序列。
它一定需要 O(n²) 的额外存储空间。它在任何情况下都只需 O(n) 时间。常见实现的时间复杂度为 O(n²),且通常不稳定。
第 11 题(2 分)
在含 15 个互不相同且已升序排列的元素中,用标准二分查找成功查找一个元素,最多进行( )次关键字比较。
{{ select(11) }}
- 3
- 5
- 4
- 15
第 12 题(2 分)
下面程序片段的时间复杂度是( )。
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
x++;
{{ select(12) }}
O(n)O(2ⁿ)O(n²)O(log n)
第 13 题(2 分)
从 14 名同学中任选 2 名组成一组,共有( )种不同选法。
{{ select(13) }}
- 28
182- 91
16384
第 14 题(2 分)
执行 int x=44, y=6; cout << x / y + x % y;,输出是( )。
{{ select(14) }}
- 12
- 9
- 7
- 10
第 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() {
int n, S;
cin >> n >> S;
vector<int> a(n);
for (int &x : a)
cin >> x;
sort(a.begin(), a.end());
long long ans = 0;
int r = n - 1;
for (int l = 0; l < n; ++l) {
while (l < r && a[l] + a[r] > S)
--r;
if (l >= r)
break;
ans += r - l;
}
cout << ans << "\n";
}
第 16 题(1 分)
程序统计下标不同的无序数对,其元素和不超过 S。
{{ select(16) }}
- T
- F
第 17 题(1.5 分)
变量 r 在整个过程中只会向左移动。
{{ select(17) }}
- T
- F
第 18 题(1.5 分)
如果删除 sort,程序仍对任意输入正确。
{{ select(18) }}
- T
- F
第 19 题(3 分)
输入:
5 6
1 2 3 4 5
输出是( )。
{{ select(19) }}
- 5
- 7
- 6
- 4
第 20 题(3 分)
排序后双指针部分的时间复杂度为( )。
{{ select(20) }}
O(n²)O(log n)O(n)O(2ⁿ)
第 21 题(3 分)
包含排序后的总时间复杂度为( )。
{{ select(21) }}
O(n)O(n log n)O(n²)O(log n)
程序 2:约瑟夫环队列模拟(第 22~27 题)
n,k均为正整数。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
queue<int> q;
for (int i = 1; i <= n; i++)
q.push(i);
while (q.size() > 1) {
for (int i = 1; i < k; i++) {
q.push(q.front());
q.pop();
}
q.pop();
}
cout << q.front() << "\n";
}
第 22 题(1.5 分)
程序模拟约瑟夫环,每次数到 k 的人出队。
{{ select(22) }}
- T
- F
第 23 题(1.5 分)
当 k=1 时,依次删除1,2,...,n-1,最后剩n。
{{ select(23) }}
- T
- F
第 24 题(1.5 分)
程序的队列永远不会为空。
{{ select(24) }}
- T
- F
第 25 题(3 分)
输入:
5 2
输出是( )。
{{ select(25) }}
- 3
- 2
- 4
- 5
第 26 题(3 分)
输入:
6 3
输出是( )。
{{ select(26) }}
- 1
- 4
- 3
- 2
第 27 题(3 分)
该直接模拟的时间复杂度大致为( )。
{{ select(27) }}
O(nk)O(n)O(2ⁿ)O(n log n)
程序 3:快速幂(第 28~33 题)
假设结果不溢出。
#include <bits/stdc++.h>
using namespace std;
long long pw(long long a, long long b) {
if (b == 0)
return 1;
long long t = pw(a, b / 2);
if (b % 2)
return t * t * a;
return t * t;
}
int main() {
long long a, b;
cin >> a >> b;
cout << pw(a, b) << "\n";
}
第 28 题(1.5 分)
函数使用递归快速幂。
{{ select(28) }}
- T
- F
第 29 题(1.5 分)
当 b 为奇数时结果多乘一个 a。
{{ select(29) }}
- T
- F
第 30 题(1.5 分)
递归深度为 O(b)。
{{ select(30) }}
- T
- F
第 31 题(3 分)
输入:
3 5
输出是( )。
{{ select(31) }}
- 81
243- 15
729
第 32 题(3 分)
pw(a,0) 的返回值是( )。
{{ select(32) }}
- 1
- 未定义
- 0
- a
第 33 题(3 分)
若不考虑溢出,乘法次数数量级为( )。
{{ select(33) }}
O(2^b)O(b)O(log b)O(1)
三、完善程序(共 10 题,每题 3 分,共 30 分)
阅读程序说明和代码。代码中的横线表示待填空位置,请从对应的四个选项中选择最合适的一项。
完善程序(一):最小公倍数(第 34~38 题)
功能说明: 输入两个正整数 a、b,输出它们的最小公倍数。
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
while (________(1)________) {
long long r = ________(2)________;
a = ________(3)________;
b = r;
}
return a;
}
int main() {
long long a, b;
cin >> a >> b;
long long g = ________(4)________;
cout << ________(5)________ << '\n';
return 0;
}
第 34 题(3 分)
空(1)应填入( )。
{{ select(34) }}
a==bbab==1
第 35 题(3 分)
空(2)应填入( )。
{{ select(35) }}
a%bb%aa/ba-b
第 36 题(3 分)
空(3)应填入( )。
{{ select(36) }}
a+brba
第 37 题(3 分)
空(4)应填入( )。
{{ select(37) }}
gcd(a,b)min(a,b)a*ba+b
第 38 题(3 分)
空(5)应填入( )。
{{ select(38) }}
ga/g*ba*b*ga+b-g
完善程序(二):矩阵转置(第 39~43 题)
功能说明: 输出一个 n × m 矩阵的转置矩阵。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> a(n, vector<int>(m));
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> ________(1)________;
for (int j = 0; j < ________(2)________; ++j) {
for (int i = 0; i < ________(3)________; ++i)
cout << ________(4)________ << ' ';
cout << ________(5)________;
}
return 0;
}
第 39 题(3 分)
空(1)应填入( )。
{{ select(39) }}
i+ja[j][i]a[i][j]a[n][m]
第 40 题(3 分)
空(2)应填入( )。
{{ select(40) }}
mn*mn0
第 41 题(3 分)
空(3)应填入( )。
{{ select(41) }}
njmi
第 42 题(3 分)
空(4)应填入( )。
{{ select(42) }}
a[j][j]a[i][i]a[i][j]a[j][i]
第 43 题(3 分)
空(5)应填入( )。
{{ select(43) }}
n"\n"m0