CSP-J 2026 第一轮模拟赛(第 03 套)
CSP-J 2026 第一轮模拟赛(第 03 套)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
CSP-J 2026 第一轮模拟赛(第 03 套)
满分:100 分 建议用时:120 分钟
所有题目均为单项选择题。判断题中,
T表示正确,F表示错误。未作答按 0 分计算。
一、单项选择题(共 15 题,每题 2 分,共 30 分)
第 1 题(2 分)
十进制整数 46 转换为二进制数,结果是( )。
{{ select(1) }}
101111101101101110110000
第 2 题(2 分)
十六进制数 (39)₁₆ 对应的十进制数是( )。
{{ select(2) }}
- 49
- 57
- 63
- 69
第 3 题(2 分)
设 int a=21, b=17, c=6; 表达式 (a & b) ^ c 的值是( )。
{{ select(3) }}
- 27
- 23
- 24
- 25
第 4 题(2 分)
一幅 112×32 的黑白位图,每个像素只需 1 bit,不考虑文件头,至少需要( )字节存储。
{{ select(4) }}
8964482243584
第 5 题(2 分)
关于程序的编译与运行,下列说法正确的是( )。
{{ select(5) }}
- 编译器只能检查程序运行结果是否正确,不能发现语法错误。
- 源程序只要保存为 .cpp 文件,就一定可以被 CPU 直接执行。
- 程序运行时出现除零错误属于运行时错误,而不是语法错误。
- 链接过程发生在程序每一次循环执行之后。
第 6 题(2 分)
关于计算机网络,下列说法正确的是( )。
{{ select(6) }}
- MAC 地址是网页的网址。
DNS 用于编译 C++ 程序。- IP 协议保证所有数据绝不丢失。
HTTP/HTTPS 常用于浏览器与 Web 服务器之间传输网页资源。
第 7 题(2 分)
一个初始为空的栈依次执行 push(6)、push(8)、pop()、push(10),此时栈顶元素是( )。
{{ select(7) }}
- 10
- 栈为空
- 6
- 8
第 8 题(2 分)
一棵含 13 个结点的树共有( )条边。
{{ select(8) }}
- 12
- 14
- 24
- 13
第 9 题(2 分)
一个含 9 个顶点的无向连通图,边数至少为( )。
{{ select(9) }}
- 9
- 36
- 7
- 8
第 10 题(2 分)
关于选择排序,下列说法正确的是( )。
{{ select(10) }}
常见实现的时间复杂度为 O(n²),且通常不稳定。它一定需要 O(n²) 的额外存储空间。它在任何情况下都只需 O(n) 时间。- 它不能用于整数序列。
第 11 题(2 分)
在含 127 个互不相同且已升序排列的元素中,用标准二分查找成功查找一个元素,最多进行( )次关键字比较。
{{ select(11) }}
127- 6
- 7
- 8
第 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 分)
从 9 名同学中任选 2 名组成一组,共有( )种不同选法。
{{ select(13) }}
- 36
- 18
512- 72
第 14 题(2 分)
执行 int x=29, y=4; cout << x / y + x % y;,输出是( )。
{{ select(14) }}
- 6
- 9
- 8
- 11
第 15 题(2 分)
解决“把已经计算过的子问题答案保存起来避免重复计算”时,最符合描述的方法是( )。
{{ select(15) }}
- 深度优先搜索(DFS)
- 枚举所有排列
- 动态规划或记忆化
- 选择排序
二、阅读程序(共 18 题,共 40 分)
阅读下列程序。判断题请选择
T或F,其他题请选择A、B、C、D。
程序 1:最长非递减连续段(第 16~21 题)
输入满足 n ≥ 1。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int &x : a)
cin >> x;
int best = 1, cur = 1;
for (int i = 1; i < n; ++i) {
if (a[i] >= a[i - 1])
++cur;
else
cur = 1;
best = max(best, cur);
}
cout << best << "\n";
}
第 16 题(1 分)
程序求的是最长连续非递减子段长度。
{{ select(16) }}
- T
- F
第 17 题(1.5 分)
相等的相邻元素会使 cur 重新变为 1。
{{ select(17) }}
- T
- F
第 18 题(1.5 分)
若序列严格递减,输出为 1。
{{ select(18) }}
- T
- F
第 19 题(3 分)
输入:
8
1 2 2 1 3 4 0 5
输出是( )。
{{ select(19) }}
- 3
- 4
- 2
- 5
第 20 题(3 分)
输入:
6
1 2 3 4 5 6
输出是( )。
{{ select(20) }}
- 5
- 1
- 7
- 6
第 21 题(3 分)
变量 cur 表示( )。
{{ select(21) }}
- 不同元素个数
- 已经排序的元素个数
- 当前处理到的位置为结尾的非递减连续段长度
- 全局最小值
程序 2:括号匹配(第 22~27 题)
输入仅包含 ()[]。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
stack<char> st;
bool ok = true;
for (char c : s) {
if (c == '(' || c == '[')
st.push(c);
else {
if (st.empty() || (c == ')' && st.top() != '(') || (c == ']'
&& st.top() != '[')) {
ok = false;
break;
}
st.pop();
}
}
if (!st.empty())
ok = false;
cout << (ok ? "YES" : "NO") << "\n";
}
第 22 题(1.5 分)
程序用于判断由圆括号和方括号组成的序列是否合法匹配。
{{ select(22) }}
- T
- F
第 23 题(1.5 分)
输入 ([)] 会输出 YES。
{{ select(23) }}
- T
- F
第 24 题(1.5 分)
循环结束后还需要检查栈是否为空。
{{ select(24) }}
- T
- F
第 25 题(3 分)
输入:
([][])
输出是( )。
{{ select(25) }}
- 0
- 1
- NO
YES
第 26 题(3 分)
输入:
(()
输出是( )。
{{ select(26) }}
- 编译错误
YES- 空行
- NO
第 27 题(3 分)
最坏情况下栈中元素个数是( )。
{{ select(27) }}
O(1)O(log n)O(n)O(n²)
程序 3:欧几里得算法(第 28~33 题)
a,b为正整数。
#include <bits/stdc++.h>
using namespace std;
int g(int a, int b) {
return b == 0 ? a : g(b, a % b);
}
int main() {
int a, b;
cin >> a >> b;
cout << g(a, b) << "\n";
}
第 28 题(1.5 分)
函数 g 使用欧几里得算法求最大公约数。
{{ select(28) }}
- T
- F
第 29 题(1.5 分)
当 b=0 时返回 a。
{{ select(29) }}
- T
- F
第 30 题(1.5 分)
g(12,18)=2。
{{ select(30) }}
- T
- F
第 31 题(3 分)
输入:
84 30
输出是( )。
{{ select(31) }}
- 3
- 2
- 14
- 6
第 32 题(3 分)
调用 g(30,18) 后下一次递归参数是( )。
{{ select(32) }}
12 1818 3030 1218 12
第 33 题(3 分)
欧几里得算法时间复杂度通常为( )。
{{ select(33) }}
O(a+b)O(log min(a,b))O(ab)O(2^a)
三、完善程序(共 10 题,每题 3 分,共 30 分)
阅读程序说明和代码。代码中的横线表示待填空位置,请从对应的四个选项中选择最合适的一项。
完善程序(一):回文字符串(第 34~38 题)
功能说明: 判断输入字符串是否为回文串。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int l = 0;
int r = ________(1)________;
bool ok = true;
while (________(2)________) {
if (________(3)________) {
ok = false;
________(4)________;
}
++l;
--r;
}
cout << (________(5)________ ? "YES" : "NO") << '\n';
return 0;
}
第 34 题(3 分)
空(1)应填入( )。
{{ select(34) }}
1s.size()-1s.size()0
第 35 题(3 分)
空(2)应填入( )。
{{ select(35) }}
r<0l==rl>rl<r
第 36 题(3 分)
空(3)应填入( )。
{{ select(36) }}
l!=rs[l]==s[r]s[l]!=s[r]s.empty()
第 37 题(3 分)
空(4)应填入( )。
{{ select(37) }}
l=0return 1continuebreak
第 38 题(3 分)
空(5)应填入( )。
{{ select(38) }}
l!okokr
完善程序(二):前缀和区间查询(第 39~43 题)
功能说明: 回答 q 次闭区间 [l,r] 的元素和。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
vector<long long> s(n + 1, 0);
for (int i = 1; i <= n; ++i) {
long long x;
cin >> x;
s[i] = ________(1)________;
}
________(4)________(q--) {
int l, r;
cin >> l >> r;
cout << ________(2)________ - ________(3)________ << ________(5)________;
}
return 0;
}
第 39 题(3 分)
空(1)应填入( )。
{{ select(39) }}
s[i-1]+xs[i-1]-xs[i+1]+xx
第 40 题(3 分)
空(2)应填入( )。
{{ select(40) }}
s[n]s[l]s[r]r
第 41 题(3 分)
空(3)应填入( )。
{{ select(41) }}
s[l-1]ls[l]s[r-1]
第 42 题(3 分)
空(4)应填入( )。
{{ select(42) }}
whileforifswitch
第 43 题(3 分)
空(5)应填入( )。
{{ select(43) }}
qs[0]"\n"l