#16. CSP-J 2026 第一轮模拟赛(第 06 套)

CSP-J 2026 第一轮模拟赛(第 06 套)

CSP-J 2026 第一轮模拟赛(第 06 套)

满分:100 分 建议用时:120 分钟

所有题目均为单项选择题。判断题中,T 表示正确,F 表示错误。未作答按 0 分计算。

一、单项选择题(共 15 题,每题 2 分,共 30 分)

第 1 题(2 分)

十进制整数 55 转换为二进制数,结果是( )。

{{ select(1) }}

  • 110110
  • 111001
  • 111000
  • 110111

第 2 题(2 分)

十六进制数 (48)₁₆ 对应的十进制数是( )。

{{ select(2) }}

  • 64
  • 84
  • 72
  • 78

第 3 题(2 分)

设 int a=24, b=23, c=5; 表达式 (a & b) ^ c 的值是( )。

{{ select(3) }}

  • 22
  • 21
  • 23
  • 25

第 4 题(2 分)

一幅 96×32 的黑白位图,每个像素只需 1 bit,不考虑文件头,至少需要( )字节存储。

{{ select(4) }}

  • 3072
  • 768
  • 384
  • 192

第 5 题(2 分)

关于程序的编译与运行,下列说法正确的是( )。

{{ select(5) }}

  • 编译器只能检查程序运行结果是否正确,不能发现语法错误。
  • 源程序只要保存为 .cpp 文件,就一定可以被 CPU 直接执行。
  • 链接过程发生在程序每一次循环执行之后。
  • 编译器的主要作用是把高级语言源程序转换为机器能够执行或进一步处理的目标代码。

第 6 题(2 分)

关于计算机网络,下列说法正确的是( )。

{{ select(6) }}

  • 路由器只能连接同一台计算机内部的设备。
  • TCP 面向连接,并提供可靠的字节流传输。
  • UDP 一定比 TCP 可靠。
  • HTTP 属于物理层协议。

第 7 题(2 分)

一个初始为空的栈依次执行 push(9)、push(11)、pop()、push(13),此时栈顶元素是( )。

{{ select(7) }}

  • 栈为空
  • 9
  • 11
  • 13

第 8 题(2 分)

一棵含 19 个结点的树共有( )条边。

{{ select(8) }}

  • 19
  • 20
  • 36
  • 18

第 9 题(2 分)

一个含 12 个顶点的无向连通图,边数至少为( )。

{{ select(9) }}

  • 12
  • 66
  • 10
  • 11

第 10 题(2 分)

关于归并排序,下列说法正确的是( )。

{{ select(10) }}

  • 它不能用于整数序列。
  • 它在任何情况下都只需 O(n) 时间。
  • 最坏时间复杂度通常为 O(n log n),并且可以稳定实现。
  • 它一定需要 O(n²) 的额外存储空间。

第 11 题(2 分)

在含 63 个互不相同且已升序排列的元素中,用标准二分查找成功查找一个元素,最多进行( )次关键字比较。

{{ select(11) }}

  • 63
  • 5
  • 6
  • 7

第 12 题(2 分)

下面程序片段的时间复杂度是( )。

for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
        x++;

{{ select(12) }}

  • O(log n)
  • O(2ⁿ)
  • O(n)
  • O(n²)

第 13 题(2 分)

从 12 名同学中任选 2 名组成一组,共有( )种不同选法。

{{ select(13) }}

  • 66
  • 132
  • 24
  • 4096

第 14 题(2 分)

执行 int x=38, y=4; cout << x / y + x % y;,输出是( )。

{{ select(14) }}

  • 12
  • 14
  • 11
  • 9

第 15 题(2 分)

解决“在无权图中求从一个起点到其他顶点的最短边数”时,最符合描述的方法是( )。

{{ select(15) }}

  • 选择排序
  • 深度优先搜索(DFS)
  • 广度优先搜索(BFS)
  • 枚举所有排列

二、阅读程序(共 18 题,共 40 分)

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

程序 1:0-9 中的众数(第 16~21 题)

假设所有输入整数均在 0 到 9 之间。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int cnt[10] = {};
    for (int i = 0, x; i < n; ++i) {
        cin >> x;
        ++cnt[x];
    }
    int best = 0;
    for (int x = 1; x < 10; ++x)
        if (cnt[x] > cnt[best])
            best = x;
    cout << best << " " << cnt[best] << "\n";
}

第 16 题(1 分)

输入数据必须在 0 到 9 之间,否则可能越界。

{{ select(16) }}

  • T
  • F

第 17 题(1.5 分)

出现次数相同时,程序会选择较大的数。

{{ select(17) }}

  • T
  • F

第 18 题(1.5 分)

程序的额外空间复杂度为 O(1)。

{{ select(18) }}

  • T
  • F

第 19 题(3 分)

输入:

8
2 1 2 3 1 2 3 3

输出是( )。

{{ select(19) }}

  • 2 3
  • 3 3
  • 1 2
  • 0 0

第 20 题(3 分)

若 n=0(假设允许),程序输出是( )。

{{ select(20) }}

  • 9 0
  • 未定义且一定崩溃
  • 0 0
  • 0 1

第 21 题(3 分)

变量 best 保存的是( )。

{{ select(21) }}

  • 当前最大频数
  • 当前众数的数值
  • 输入长度
  • 最后读入的数

程序 2:无权图 BFS(第 22~27 题)

顶点编号1到n。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, s;
    cin >> n >> m >> s;
    vector<vector<int>> g(n + 1);
    while (m--) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<int> d(n + 1, -1);
    queue<int> q;
    d[s] = 0;
    q.push(s);
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int v : g[u])
            if (d[v] == -1) {
                d[v] = d[u] + 1;
                q.push(v);
            }
    }
    for (int i = 1; i <= n; i++)
        cout << d[i] << ' ';
}

第 22 题(1.5 分)

程序在无向图上进行广度优先搜索。

{{ select(22) }}

  • T
  • F

第 23 题(1.5 分)

d[v] 表示从 s 到 v 的最少边数,不可达时为 -1。

{{ select(23) }}

  • T
  • F

第 24 题(1.5 分)

同一顶点可能被重复入队很多次。

{{ select(24) }}

  • T
  • F

第 25 题(3 分)

输入:

4 3 1
1 2
2 3
1 4

输出是( )。

{{ select(25) }}

  • 0 2 1 1
  • 1 2 3 2
  • 0 1 2 1
  • 0 1 1 1

第 26 题(3 分)

使用邻接表时总时间复杂度是( )。

{{ select(26) }}

  • O(n+m)
  • O(log n)
  • O(nm)
  • O(n²m)

第 27 题(3 分)

若图为有向图,需修改( )。

{{ select(27) }}

  • 把d初值改为0
  • 只加入 g[u].push_back(v)
  • 把队列改为栈
  • 删除起点

程序 3:无连续1的二进制串(第 28~33 题)

阅读递归程序。

#include <bits/stdc++.h>
using namespace std;

long long f(int n, int last) {
    if (n == 0)
        return 1;
    long long ans = f(n - 1, 0);
    if (last == 0)
        ans += f(n - 1, 1);
    return ans;
}

int main() {
    int n;
    cin >> n;
    cout << f(n, 0) << "\n";
}

第 28 题(1.5 分)

程序统计长度n且不含连续两个1的二进制串数量。

{{ select(28) }}

  • T
  • F

第 29 题(1.5 分)

参数 last 表示上一位是否为1。

{{ select(29) }}

  • T
  • F

第 30 题(1.5 分)

该递归没有记忆化,会重复计算。

{{ select(30) }}

  • T
  • F

第 31 题(3 分)

输入 3,输出是( )。

{{ select(31) }}

  • 8
  • 4
  • 5
  • 3

第 32 题(3 分)

f(0,0) 返回( )。

{{ select(32) }}

  • 2
  • 0
  • 1
  • 未定义

第 33 题(3 分)

可将其优化为( )。

{{ select(33) }}

  • 二分答案
  • 哈希冲突
  • 动态规划
  • 选择排序

三、完善程序(共 10 题,每题 3 分,共 30 分)

阅读程序说明和代码。代码中的横线表示待填空位置,请从对应的四个选项中选择最合适的一项。

完善程序(一):快速幂(第 34~38 题)

功能说明: 计算 a^b,假设结果不会溢出。

#include <bits/stdc++.h>
using namespace std;

long long pw(long long a, long long b) {
    long long ans = 1;
    while (________(1)________) {
        if (________(2)________)
            ans = ________(3)________;
        a = ________(4)________;
        b /= 2;
    }
    return ________(5)________;
}

int main() {
    long long a, b;
    cin >> a >> b;
    cout << pw(a, b) << '\n';
    return 0;
}

第 34 题(3 分)

空(1)应填入( )。

{{ select(34) }}

  • ans>0
  • b>0
  • a>0
  • b==0

第 35 题(3 分)

空(2)应填入( )。

{{ select(35) }}

  • ans==1
  • b%2==1
  • b%2==0
  • a%2==1

第 36 题(3 分)

空(3)应填入( )。

{{ select(36) }}

  • a*a
  • ans*a
  • ans+a
  • ans/b

第 37 题(3 分)

空(4)应填入( )。

{{ select(37) }}

  • a*2
  • a*a
  • a+1
  • a/b

第 38 题(3 分)

空(5)应填入( )。

{{ select(38) }}

  • b
  • a
  • 1
  • ans

完善程序(二):括号序列判断(第 39~43 题)

功能说明: 判断只含小括号的字符串是否合法。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;
    int bal = 0;
    bool ok = true;
    for (char c : s) {
        if (c == '(')
            ________(1)________;
        else
            ________(2)________;
        if (________(3)________) {
            ok = false;
            ________(4)________;
        }
    }
    if (________(5)________)
        ok = false;
    cout << (ok ? "YES" : "NO") << '\n';
    return 0;
}

第 39 题(3 分)

空(1)应填入( )。

{{ select(39) }}

  • ok=false
  • --bal
  • ++bal
  • bal=0

第 40 题(3 分)

空(2)应填入( )。

{{ select(40) }}

  • --bal
  • bal+=2
  • ++bal
  • continue

第 41 题(3 分)

空(3)应填入( )。

{{ select(41) }}

  • bal==0
  • bal>0
  • bal<0
  • c=='('

第 42 题(3 分)

空(4)应填入( )。

{{ select(42) }}

  • bal++
  • break
  • continue
  • return 1

第 43 题(3 分)

空(5)应填入( )。

{{ select(43) }}

  • bal!=0
  • ok
  • s.empty()
  • bal==0