#J0003. CSP-J 2025 初赛模拟卷 3
CSP-J 2025 初赛模拟卷 3
普及组 CSP-J2025 初赛模拟卷 3
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
第 1 题 如果 a 和 b 都是 char 类型的变量,下列哪个语句不符合 C++ 语法?( ) {{ select(1) }}
- b = ++a;
- b = a'++;
- b = 'a' + 1;
- b = a++;
第 2 题 泛洪填充算法属于( )算法。 {{ select(2) }}
- 贪心
- 二分
- 动态规划
- 搜索
第 3 题 在下列代码的横线处填写( ),可以使得输出是“58”。
#include
using namespace std;
int main() {
int x = 8, y = 5;
x = x ^ y;
y = x ^ y;
cout
using namespace std;
int a[2025], dp[2025];
int main() {
int n, i, j, ret = -1;
cin >> n;
for (i = 1; i > a[i];
dp[i] = 1;
}
for (i = 1; i
02 using namespace std;
03
04 bool isValid(string s) {
05 stack stk;
06 for (char ch : s) {
07 if (ch == '(' || ch == '[' || ch == '{') {
08 stk.push(ch);
09 } else {
10 if (stk.empty())
11 return false;
12
13 if (ch == ')' && stk.top() != '(') {
14 return false;
15 }
16
17 if (ch == ']' && stk.top() != '[') {
18 return false;
19 }
20
21 if (ch == '}' && stk.top() != '{') {
22 return false;
23 }
24
25 stk.pop();
26 }
27 }
28 return stk.empty();
29 }
30
31 int main() {
32 string s;
33 cin >> s;
34 if (isValid(s))
35 cout `,则只需要添加 `` 头文件就可以通过编译。
{{ select(18) }}
- 对
- 错
**第 19 题** 若输入((((([))))),则输出是什么?( )
{{ select(19) }}
- Valid
- Invalid
- invalid
- valid
**第 20 题** 这个程序的时间复杂度是多少?( )
{{ select(20) }}
- $O(n)$
- $O(n²)$
- $O(nlogn)$
- $O(n \sqrt n)$
### (2)
```cpp
01 #include
02 using namespace std;
03
04 int main() {
05 int n;
06 cin >> n;
07 vector a(n);
08 for (int i = 0; i > a[i];
10 vector dp(n + 1, 0);
11 for (int i = 0; i = 2)
13 dp[i] = max(dp[i - 1], dp[i - 2] + a[i]);
14 else
15 dp[i] = a[i];
16 if (i >= 1)
17 dp[i] = max(dp[i], dp[i - 1]);
18 }
19 int ans = 0;
20 for (int i = 0; i = 2; 初值为 dp[0] = a[0], dp[1] = a[1]。
{{ select(22) }}
- 对
- 错
**第 23 题** (2 分)在主函数中,访问 dp[n] 不会发生越界错误。
{{ select(23) }}
- 对
- 错
**第 24 题** 当输入的 a 数组为 [2, 1, 1, 2] 时,程序的输出为( )
{{ select(24) }}
- 1
- 2
- 3
- 4
**第 25 题** 若将第 13 行改为 dp[i] = max(dp[i-1], dp[i-2] = a[i]);,则当输入的 a 数组为 [10, 1, 0, 25, 3] 时,程序的输出为( )
{{ select(25) }}
- 1
- 10
- 35
- 25
**第 26 题** (4 分)当输入的 a 数组为 [0, 2, 3, 4, 5, 6, 0, 8, 9] 时,程序的输出为( )
{{ select(26) }}
- 18
- 33
- 34
- 2
### (3)
```cpp
01 #include
02 using namespace std;
03
04 int bfs(vector>& grid) {
05 const int m = grid.size(), n = grid[0].size();
06 const int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
07 using pii = pair;
08 queue
q;
09 vector> vis(m + 1, vector(n + 1));
10 int ans = 0, tot = 0, cnt = 0;
11 for (int i = 0; i = m || cy = n || vis[cx][cy] || grid[cx][cy] != 1)
27 continue;
28 if (grid[cx][cy] == 1)
29 q.push({cx, cy}), vis[cx][cy] = true;
30 ans++;
31 }
32 }
33 }
34 if (tot == cnt)
35 return max(0, ans - 1);
36 else
37 return -1;
38 }
39
40 int main() {
41 int m, n;
42 cin >> m >> n;
43 vector> a(m, vector(n));
44 for (int i = 0; i > a[i][j];
47 cout
02 using namespace std;
03
04 int main() {
05 string s;
06 cin >> s;
07 long long cnt = ①, ans = 0;
08 for (int i = 4; ②; i++) {
09 auto cur = ③;
10 if (cur == "heavy")
11 cnt++;
12 else if (cur == "metal")
13 ④;
14 }
15 cout = s.length()
**第 35 题** ③处应填( )
{{ select(35) }}
- s.substr(i, 5)
- s.substr(i - 5, 5)
- s.substr(i - 4, 5)
- s.substr(i - 5)
**第 36 题** ④处应填( )
{{ select(36) }}
- cur == "heavy"
- cur == "metal"
- cur != "heavy"
- cur != "metal"
**第 37 题** ⑤处应填( )
{{ select(37) }}
- ans++
- ans += cnt
- cnt += ans
- cnt++
### (2)
**题目描述**
输入 l 和 r(1 ≤ l ≤ r ≤ 10¹⁸)。如果整数 x 的首位数字等于末位数字,那么称 x 是合法数字。例如 101,477474, 9 是合法数字,而 47, 253,1020 不是合法数字。输出 [l, r] 中有多少个合法数字?
```cpp
01 #include
02 using namespace std;
03 long long l, r;
04 long long fir(long long g) {
05 while (g >= 10)
06 ①;
07 return g;
08 }
09 long long fin(long long g) {
10 return g % 10;
11 }
12 long long solve(long long n) {
13 if (n > l >> r;
24 cout fin(n)
- fir(n) >= fin(n)
**第 41 题** ④处应填( )
{{ select(41) }}
- base + flag
- base
- flag
- base - flag
**第 42 题** ⑤处应填( )
{{ select(42) }}
- solve(r)
- solve(l)
- solve(r) - solve(l - 1)
- solve(r) - solve(l)