#J0004. CSP-J 2025 初赛模拟卷 4

CSP-J 2025 初赛模拟卷 4

普及组 CSP-J2025 初赛模拟卷 4

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

第 1 题 正整数 2025 与 1800 的最大公约数是( )。 {{ select(1) }}

  • 15
  • 25
  • 45
  • 225

第 2 题 表达式((0'==0)+'s'+5+2.0)的结果类型为( )。 {{ select(2) }}

  • double
  • int
  • char
  • bool

第 3 题 对一个 int 类型的值,执行以下哪个操作后,一定会变回原来的值?( ) {{ select(3) }}

  • 左移 5 位,再右移 5 位
  • 右移 5 位,再左移 5 位
  • 按位或 15,再按位与 15
  • 按位异或 15,再按位异或 15

第 4 题 在数组 H[x]中,若存在 (iH[j]),则称 (H[i],H[j]) 为数组 H[x] 的一个逆序对。对于序列 27, 4, 1, 59, 3, 26, 38, 15,在不改变顺序的情况下,去掉( )会使逆序对的个数减少 4。 {{ select(4) }}

  • 1
  • 3
  • 26
  • 15

第 5 题 如果字符串 s 在字符串 str 中出现,则称字符串 s 为字符串 str 的子串。设字符串 str="oiers",则 str 的非空子串的数目是( )。 {{ select(5) }}

  • 17
  • 16
  • 15
  • 14

第 6 题 以下哪种排序算法的平均时间复杂度最好?( ) {{ select(6) }}

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

第 7 题 如果 x 和 y 均为 int 类型的变量,且 y 的值不为 0,那么能正确判断“x 是 y 的 2 倍”的表达式是( ) {{ select(7) }}

  • (x >> 2 == y)
  • (x - 2 * y) % 2 != 0
  • (x / y == 2)
  • (x == 2 * y)

第 8 题 表达式 a*(b+c)-d 的后缀表达式为( )。 {{ select(8) }}

  • abcd*+-
  • abc+*d-
  • abc*+d-
  • -+*abcd

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

  • SMTP 和 POP3 都是电子邮件发送协议
  • IPv6 地址是从 IPv4、IPv5 一路升级过来的
  • 计算机网络是一个在协议控制下的多机互连系统
  • 192.168.0.1 是 A 类地址

第 10 题 下列哪种语言不是面向对象的语言?( ) {{ select(10) }}

  • Java
  • C++
  • Python
  • Fortran

第 11 题 信息学奥赛的所有课程和课程间的先修关系构成一个有向图 G,我们用有向边 表示课程 A 是课程 B 的先修课,则要找到某门课程 C 的全部先修课,下面哪种方法不可行?( ) {{ select(11) }}

  • BFS
  • DFS
  • 枚举
  • BFS+DFS

第 12 题 一个字长为 8 位的整数的补码为 11111001,则它的原码是( )。 {{ select(12) }}

  • 00000111
  • 10000110
  • 10000111
  • 11111001

第 13 题 元素 A、B、C、D、E、F 入栈的顺序为 A,B,C,D,E,F,如果第一个出栈的是 C,则最后一个出栈的不可能是( )。 {{ select(13) }}

  • A
  • B
  • D
  • F

第 14 题 一个三位数等于它的各位数字的阶乘之和,则此三位数的各位数字之和为( ) {{ select(14) }}

  • 9
  • 10
  • 11
  • 多于一种情况

第 15 题 在一个非连通无向图 G 中有 36 条边,则该图至少有( )个顶点。 {{ select(15) }}

  • 8
  • 9
  • 10
  • 7

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

(1)

01 #include 
02 using namespace std;
03
04 using i64 = long long;
05
06 const i64 k = 3;
07 const i64 mod = 8;
08
09 i64 toint(string s) {
10     sort(s.begin(), s.end());
11     i64 ans = 0;
12     for (int i = 0; i > solve(vector strs) {
19     map> mp;
20     for (auto s : strs)
21         mp[toint(s)].push_back(s);
22     vector> ans;
23     for (auto v : mp)
24         ans.push_back(v.second);
25     return ans;
26 }
27
28
29 int main() {
30     int n;
31     cin >> n;
32     vector vec(n);
33     for (int i = 0; i > vec[i];
35     auto ans = solve(vec);
36     for (auto v : ans)
37         for (int i = 0; i ` 换为 ``,程序依然可以正常运行。
{{ select(18) }}
- V
- ×

**第 19 题** 若输入 4 aad zpf zpz yyl,则输出是什么?( )
{{ select(19) }}
- aad(换行)zpf(换行)zpz(换行)yyl(换行)
- aad zpf(换行)zpz yyl(换行)
- aad zpf zpz(换行)yyl(换行)
- aad zpf zpz yyl(换行)

**第 20 题** 这个程序的时间复杂度是多少?( )
{{ select(20) }}
- O(n)
- O(n²)
- O(nlogn)
- O(n²logn)

### (2)
```cpp
01 #include 
02 using namespace std;
03
04 int calc(vector> &grid) {
05     int n = grid.size(), m = grid[0].size();
06     vector dp(m);
07     dp[0] = (grid[0][0] == 0);
08     for (int i = 0; i = 0 && grid[i][j - 1] == 0)
15                 dp[j] += dp[j - 1];
16         }
17     return dp[m - 1];
18 }
19
20
21 int main() {
22     int n, m;
23     cin >> n >> m;
24     vector> a(n, vector(m));
25     for (int i = 0; i > a[i][j];
28     cout > a(n+1, vector(m+1))`,则当输入的 n=3,m=3 时,calc 函数中的 n=3,m=3。
{{ select(23) }}
- V
- ×

**第 24 题** 当输入的 a 数组为 {{0,0,1}, {1,1,0}, {0,1,0}} 时,程序的输出为( )
{{ select(24) }}
- 0
- 1
- 2
- 3

**第 25 题** 若删除第 12~16 行的代码,则当输入的 a 数组为 {{0,0,0}, {0,1,0}, {0,0,0}} 时,程序的输出为( )
{{ select(25) }}
- 1
- 2
- 3
- 4

**第 26 题** (4 分)当输入的 a 数组为 {{0,0,2}, {0,1,2}, {5,3,4}} 时,程序的输出为( )
{{ select(26) }}
- 0
- 1
- 2
- 3

### (3)
```cpp
01 #include
02 using namespace std;
03
04 using i64 = long long;
05
06 int cmp(string v1, string v2) {
07     int i = 0, j = 0;
08     while (i  num2)
15             return 1;
16         else if (num1 > n;
27     vector s(n);
28     for (int i = 0; i > s[i];
30     if (s[i][0] == '.')
31         cout 
02 using namespace std;
03
04 int gcd(int x, int y) {
05     return y ? gcd(y, x % y) : x;
06 }
07
08 void solve() {
09     int n;
10     cin >> n;
11     vector a(n + 1), b(n + 2);
12     for (int i = 1; i > a[i];
14     b[n] = b[n + 1] = ①;
15     for (int i = 1; i  pre(n + 1), suf(n + 2);
18     pre[0] = 1;
19     for (int i = 1; i = 1; i--)
23         suf[i] = suf[i + 1] && (b[i] > t;
36     while (t--)
37         solve();
38     return 0;
39 }

第 33 题 ①处应填( ) {{ select(33) }}

  • 0
  • 3E9
  • -1E9
  • 2E9

第 34 题 ②处应填( ) {{ select(34) }}

  • b[i] >= b[i - 1]
  • b[i] b[i - 1]
  • b[i] 02 using namespace std; 03 04 const int inf = 0x3f3f3f3f; 05 06 int main() { 07 int n; 08 cin >> n; 09 vector a(n + 1), dp(①, inf); 10 for (int i = 1; i > a[i]; 12 dp[n + 1] = ②; 13 for (int i = n; i >= 1; i--) { 14 dp[i] = ③; 15 if (i + a[i] + 1 <= n + 1) 16 dp[i] = min(dp[i], ④); 17 } 18 cout << ⑤ << endl; 19 return 0; 20 }

**第 38 题** ①处应填( )
{{ select(38) }}
- n - 1
- n
- n + 1
- n + 2

**第 39 题** ②处应填( )
{{ select(39) }}
- 0
- 1
- -1
- inf

**第 40 题** ③处应填( )
{{ select(40) }}
- dp[i + 1]
- dp[i - 1]
- dp[i + 1] + 1
- dp[i - 1] + 1

**第 41 题** ④处应填( )
{{ select(41) }}
- dp[i + a[i] + 1]
- dp[i + a[i]]
- dp[a[i] + 1]
- dp[i + a[i] - 1]

**第 42 题** ⑤处应填( )
{{ select(42) }}
- dp[n]
- dp[1]
- dp[n - 1]
- dp[0]