#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) }}

  • 111001
  • 111010
  • 111100
  • 111011

第 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) }}

  • 1120
  • 4480
  • 280
  • 560

第 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
  • 156
  • 8192
  • 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 分)

阅读下列程序。判断题请选择 TF,其他题请选择 ABCD

程序 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 9
  • 1 2 4 4 5 6 9
  • 1 4 6 2 4 5 9
  • 2 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 5
  • 1 2 4 5 3
  • 4 5 2 3 1
  • 1 3 2 4 5

第 32 题(3 分)

树中共存储的父子边数是( )。

{{ select(32) }}

  • n
  • 2n
  • 0
  • n-1

第 33 题(3 分)

递归深度最坏为( )。

{{ select(33) }}

  • 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=x
  • cnt[i]++

第 35 题(3 分)

空(2)应填入( )。

{{ select(35) }}

  • 1
  • 0
  • n
  • 100

第 36 题(3 分)

空(3)应填入( )。

{{ select(36) }}

  • cnt[x]==0
  • cnt[x]>=cnt[best]
  • cnt[x]>cnt[best]
  • x>best

第 37 题(3 分)

空(4)应填入( )。

{{ select(37) }}

  • x
  • cnt[x]
  • 0
  • best+1

第 38 题(3 分)

空(5)应填入( )。

{{ select(38) }}

  • cnt[best]
  • cnt[0]
  • n
  • best

完善程序(二):最长严格递增连续段(第 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) }}

  • 0
  • 1
  • n
  • a[0]

第 40 题(3 分)

空(2)应填入( )。

{{ select(40) }}

  • 1
  • a[0]
  • n
  • 0

第 41 题(3 分)

空(3)应填入( )。

{{ select(41) }}

  • i>n
  • a[i]<a[i-1]
  • a[i]>a[i-1]
  • a[i]>=a[i-1]

第 42 题(3 分)

空(4)应填入( )。

{{ select(42) }}

  • cur=0
  • best++
  • --cur
  • ++cur

第 43 题(3 分)

空(5)应填入( )。

{{ select(43) }}

  • best+cur
  • min(best,cur)
  • cur
  • max(best,cur)