#J0001. CSP-J 2025 初赛模拟卷 1

CSP-J 2025 初赛模拟卷 1

信息学奥赛 CSP-J 2025 初赛模拟卷 1

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

第 1 题 在标准 ASCII 码表中,已知英文字母 c 的 ASCII 码十进制表示是 99,那么英文字母 x 的 ASCII 码十六进制表示是 ( )。 {{ select(1) }}

  • 77
  • 78
  • 79
  • 7A

第 2 题 以下关于 CSP 与 GESP 的描述正确的是 ( )。 {{ select(2) }}

  • CSP-J/CSP-S 属于非专业级别软件能力认证,只有中小学生才能参加
  • CSP 是中国通信学会举办的程序设计竞赛
  • GESP 是中国电子学会举办的程序设计竞赛
  • GESP C++ 七级成绩 80 分及以上或者八级成绩 90 分及以上,可以申请免 CSP-J 初赛

第 3 题 以下可以用作 C++ 程序中的变量名的是 ( )。 {{ select(3) }}

  • x1
  • new
  • class
  • public

第 4 题 以下不属于桌面或者手机操作系统的是 ( )。 {{ select(4) }}

  • Linux
  • Android
  • MATLAB
  • Windows 11

第 5 题 C++ 中使用输入和输出函数 cincout 会用到 ( ) 头文件。 {{ select(5) }}

  • iostream
  • cmath
  • cstdio
  • algorithm

第 6 题 寻找最短路径的广度优先搜索算法经常用到的数据结构是 ( )。 {{ select(6) }}

  • 链表
  • 向量
  • 队列

第 7 题 以下哪个域名后缀不属于中华人民共和国管辖?( ) {{ select(7) }}

  • cn
  • uk
  • hk
  • mo

第 8 题 下列排序算法中,平均情况下 ( ) 算法的时间复杂度最小。 {{ select(8) }}

  • 插入排序
  • 选择排序
  • 归并排序
  • 冒泡排序

第 9 题 关于计算机网络,下面的说法中正确的是 ( )。 {{ select(9) }}

  • TCP 是网络层协议
  • 计算机病毒只能通过 U 盘等介质传播,不能通过计算机网络传播
  • 计算机网络可以实现资源共享
  • 公司内部的几台计算机组成的网络规模太小,不能称为计算机网络

第 10 题 序列 7, 5, 1, 12, 3, 6, 9, 4 的逆序对有 ( ) 个。 {{ select(10) }}

  • 15
  • 12
  • 13
  • 14

第 11 题 下列属于图像文件格式的是 ( )。 {{ select(11) }}

  • MPEG
  • DOCX
  • JPEG
  • WMV

第 12 题 不管 P、Q 如何取值,以下逻辑表达式中取值恒为假的是 ( )。 {{ select(12) }}

  • (¬Q∧P)∨(Q∧¬P)
  • ((¬P∨Q)∨(P∨¬Q))∧P∧¬Q
  • ¬P∧(¬Q∨P)∨(Q∨¬P)∧P
  • ((¬P∨Q)∨(Q∨¬P))∧Q∧¬P

第 13 题 树的根结点的高度为 1,某完全二叉树有 2025个结点,其高度是 ( )。 {{ select(13) }}

  • 10
  • 11
  • 12
  • 13

第 14 题 现有 9 个苹果,要放入 5 个不同的盘子,允许有的盘子中放 0 个苹果,则不同的放法共有 ( ) 种。 {{ select(14) }}

  • 720
  • 715
  • 126
  • 252

第 15 题 G 是一个非连通无向图(没有重边和自环),共有 36 条边,则该图至少有 ( ) 个顶点。 {{ select(15) }}

  • 6
  • 9
  • 10
  • 8

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 V,错误填 ×;除特殊说明外,判断题每题 2.5 分,选择题每题 3 分,共计 40 分)

程序 (1)

#include 
using namespace std;
using i64 = long long;

int popcount(i64 x) {
    int res = 0;
    while (x) {
        if (x & 1) 
          res++;
        x >>= 1;
    }
    return res;
}

int calc(i64 x) {
    int sum = 0;
    for (i64 i = 1; i > l >> r;
    cout ` 改成 `#include `,程序仍能正常运行。 ( )
{{ select(18) }}
- 对
- 错

**选择题 19** 若输入为 1 12,则输出是什么?( )
  {{ select(19) }}
  - 121
  - 120
  - 122
  - 222

**选择题 20** 程序中的 `sum` 函数实现了什么功能?( )
  {{ select(20) }}
  - 计算了 [l, r] 区间内的每个数二进制位上 1 的个数之和
  - 计算了 [l, r] 区间内的每个数二进制位上 0 的个数之和
  - 计算了 (l, r] 区间内的每个数二进制位上 1 的个数之和
  - 计算了 (l, r] 区间内的每个数二进制位上 0 的个数之和

### 程序 (2)
```cpp
#include 
using namespace std;

const int inf = 0x3f3f3f3f;

int solve(vector cur) {
    int n = cur.size();
    vector> dp(n + 1, vector(n + 1, inf));
    for (int i = 0; i > n;
    vector cost(n);
    for (int i = 0; i > cost[i];
    }
    cout  cost(n + 1)`,则当输入 3 1 2 3 时,`solve` 函数中的 `n = 3`。 ( )
  {{ select(23) }}
- 对
- 错

**选择题 24** 当输入的 `cost` 数组为 `{4, 0, 0, 5, 6}` 时,程序的输出为 ( )。
  {{ select(24) }}
  - 23
  - 25
  - 24
  - 22

**选择题 25** 若将第 17 行改为 `dp[i][j] = min(dp[i][j], dp[i - 1][j] - dp[i][j - 1]);`,则当输入的 `cost` 数组为 `{4, 0, 0, 5, 6}` 时,程序的输出为 ( )。
  {{ select(25) }}
  - 20
  - 21
  - 22
  - 23

**选择题 26** 当输入的 `cost` 数组为 `{4, 0, 0, 5, 6}` 时,在 `solve` 函数中,`dp[2][3]` 的值为 ( )。
  {{ select(26) }}
  - 1
  - 2
  - 3
  - 4

### 程序 (3)
```cpp
#include 
using namespace std;

int func(int a, int b) {
    if (a == 0) return b;
    if (b == 0) return a;
    return a + func(b, a % b);
}

int main() {
    int x, y;
    cin >> x >> y;
    cout  func(5, 3) -> func(3, 2) -> func(2, 1) -> func(1, 0)`
  - `func(3, 5) -> func(5, 3) -> func(3, 2) -> func(2, 1) -> func(1, 1) -> func(1, 0)`
  - `func(3, 5) -> func(5, 2) -> func(2, 1) -> func(1, 1) -> func(1, 0)`
  - `func(3, 5) -> func(5, 2) -> func(2, 1) -> func(1, 0)`

**选择题 32** 若将第 10 行的代码改为 `return a + func(b, a - b);`,则当输入为 35 时,得到的输出为 ( )。
  {{ select(32) }}
  - 14
  - 8
  - 6
  - 产生未定义行为,结果未知

## 三、完善程序(单选题,每小题 3 分,共计 30 分)

### 题目 (1)
题目描述:给定一个整数数组 `colors` 和一个整数 `k`,其中 `colors` 表示一个由红色瓷砖和蓝色瓷砖组成的环,第 `i` 块瓷砖的颜色为 `colors[i]`(1 代表红色,0 代表蓝色)。环中连续 `k` 块瓷砖的颜色如果是交替颜色(除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它左边瓷砖和右边瓷砖的颜色都不同),那么它被称为一个交替组。现在,请你找出交替组的个数。

```cpp
#include 
#include 
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector colors(n);
    for (int i = 0; i > colors[i];
    }
    int ans = 0, cnt =  ②;
    for (int i = 0; i = k);
    }
    cout  n`
  - `i >= n`
  -  `i 
#include 
using namespace std;

const int mod = 1e9 + 7;
vector> pos = {
    {4, 6}, {6, 8}, {7, 9}, {4, 8}, {0, 9, 0}, {①}, {0, 1, 7}, {2, 6}, {1, 3}, {2, 4}};

int main() {
    int n;
    cin >> n;
    vector> dp(10, vector(n + 1, 0));
    for (int i = 0; i < 10; i++) {
        ② = 1;
    }
    for (int j = 2; j <= n; j++) {
        for (int i = 0; i < 10; i++) {
            for (int m = 0; m < pos[i].size(); m++) {
                dp[i][j] += dp[③] ][j - 1];
               ④;
            }
        }
    }
    int ans = 0;
    for (int i = 0; i < 10; i++) {
        ⑤;
      ans %= mod;
    }    
    cout << ans << endl;
    return 0;
}

选择题 38 ①处应填 ( ) {{ select(38) }}

  • {1, 3, 7, 9}
  • {*, #}
  • {2, 8, 0}
  • {}

选择题 39 ②处应填 ( ) {{ select(39) }}

  • dp[i][1]
  • dp[1][i]
  • dp[i][0]
  • dp[0][i]

选择题 40 ③处应填 ( ) {{ select(40) }}

  • k
  • pos[k][i]
  • pos[i][k]
  • pos[i-1][K]

选择题 41 ④处应填 ( ) {{ select(41) }}

  • dp[i][k] %= mod
  • dp[j][i] -= mod
  • dp[i][j] %= mod
  • dp[i][j] -= mod

选择题 42 ⑤处应填 ( ) {{ select(42) }}

  • ans += dp[i][n]
  • ans += dp[i][n-1]
  • ans += dp[n][i]
  • ans += dp[n - 1][i]