42 · 珅泽教育CSP-J第一轮模拟考第二套

历年真题 · 共 45 题 · 建议用时 60 分钟
开始整卷作答 按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共15题,每题2分,共计30分) 第 1–15 题 · 共 15 题
## 二、阅读程序(判断题1分,选择题3分,共计37分) 判断题正确填 `T`,错误填 `F`。 ### 第1题 ```cpp void recursion(int n) { if (n == 0) return; int lowbit = n % 3; recursion(n / 3); std::cout << lowbit; } void iteration(int n) { int buffer[10]; int size = 0; while (n > 0) { buffer[size++] = n % 3; n = n / 3; } while (size > 0) { std::cout << buffer[--size]; } } ``` 第 16–20 题 · 共 5 题
### 第2题 ```cpp int solve1(int n) { int s = 0; int f = 1; for (int i = 1; i <= n; ++i) { f = f * i; int m = f; while (m % 10 == 0) { s++; m = m / 10; } } return s; } int solve2(int n) { int t = 0; while (n > 0) { t = t + n / 5; n = n / 5; } return t; } ``` 第 21–26 题 · 共 6 题
### 第三题 ```cpp #include<iostream> int play[3][3] = {0}; int score[3][3]; bool check_row(int i, int role) { if (play[i][0] != role) return false; if (play[i][1] != role) return false; if (play[i][2] != role) return false; return true; } bool check_col(int j, int role) { if (play[0][j] != role) return false; if (play[1][j] != role) return false; if (play[2][j] != role) return false; return true; } bool check_diag(int role) { if (play[1][1] != role) return false; if (play[0][0] == role && play[2][2] == role) return true; if (play[0][2] == role && play[2][0] == role) return true; return false; } bool check(int i, int j, int role) { return check_row(i, role) || check_col(j, role) || check_diag(role); } int adv(int step) { if (step == 9) return 0; int role = (step % 2) + 1; const int inf = 1000000000; int best = -inf; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (play[i][j] == 0) { play[i][j] = role; if (check(i, j, role)) { best = inf; } else { int test = score[i][j] - adv(step + 1); if (best < test) { best = test; } } play[i][j] = 0; } } } return best; } int main() { for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) std::cin >> score[i][j]; int d = adv(0); if (d > 0) std::cout << "First Win\n"; else std::cout << "Second Win\n"; } ``` 第 27–34 题 · 共 8 题
## 三、完善程序(单选题,每小题3分,共计33分) ### 第1题 有 $n$ 名学生参加了一场考试,分数没有公开。现有 $m$ 条线索,其中第 $i$ 条线索确定第 $x_i$ 号学生的分数高于第 $y_i$ 号学生。又确定没有人分数是相同的。根据这些线索,将学生的分数排序后,多少人的名次是可以确定的呢?保证给定的线索没有矛盾。 ```cpp #include<iostream> int main() { const int maxn = 100; bool f[maxn][maxn] = {false}; int c[maxn] = {0}; int n, m; std::cin >> n >> m; for (int i = 0; i < m; ++i) { int x, y; std::cin >> x >> y; ____(1)____; } for (int _(2)_ = 0; _(2)_ < n; ++ _(2)_) for (int _(3)_ = 0; _(3)_ < n; ++ _(3)_) for (int _(4)_ = 0; _(4)_ < n; ++ _(4)_) if (____(5)____) f[i][j] = true; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) if (i != j) if (___(6)___) c[i]++; int ans = 0; for (int i = 0; i < n; ++i) if (___(7)___) ans ++; std::cout << ans << '\n'; } ``` 第 35–39 题 · 共 5 题
### 第2题 给定 $n$ 个整数 $a_0,a_1,\ldots,a_{n-1}$,其中 $1\le n\le40$,请统计,这个序列有多少种子序列,其子序列的和大于 $0$? ```cpp #include<iostream> #include<algorithm> int a[40]; int x[1 << 20]; int y[1 << 20]; int generate(int begin, int end, int sum, int* out, int pos) { if (begin == end) { ____(1)____; return 1; } else { int f = generate(begin + 1, end, sum + a[begin], out, pos); int s = generate(begin + 1, end, ____(2)____); return f + s; } } int main() { int n; std::cin >> n; for (int i = 0; i < n; ++i) std::cin >> a[i]; int x_size = ____(3)____; int y_size = ____(4)____; std::sort(x, x + x_size); std::sort(y, y + y_size); int j = y_size; long long pair = 0; for (int i = 0; i < x_size; ++i) { while (j > 0 && ____(5)____) { j--; } pair += ____(6)____; } std::cout << pair << "\n"; } ``` 第 40–45 题 · 共 6 题
展开逐题清单(单独练某一道)
● 绿=已通过 ● 橙=做过没全对 ● 灰=没做过
## 一、单项选择题(共15题,每题2分,共计30分)
1. 珅泽教育CSP-J第一轮模拟考第二套 第 1 题 2. 珅泽教育CSP-J第一轮模拟考第二套 第 2 题 3. 珅泽教育CSP-J第一轮模拟考第二套 第 3 题 4. 珅泽教育CSP-J第一轮模拟考第二套 第 4 题 5. 珅泽教育CSP-J第一轮模拟考第二套 第 5 题 6. 珅泽教育CSP-J第一轮模拟考第二套 第 6 题 7. 珅泽教育CSP-J第一轮模拟考第二套 第 7 题 8. 珅泽教育CSP-J第一轮模拟考第二套 第 8 题 9. 珅泽教育CSP-J第一轮模拟考第二套 第 9 题 10. 珅泽教育CSP-J第一轮模拟考第二套 第 10 题 11. 珅泽教育CSP-J第一轮模拟考第二套 第 11 题 12. 珅泽教育CSP-J第一轮模拟考第二套 第 12 题 13. 珅泽教育CSP-J第一轮模拟考第二套 第 13 题 14. 珅泽教育CSP-J第一轮模拟考第二套 第 14 题 15. 珅泽教育CSP-J第一轮模拟考第二套 第 15 题
## 二、阅读程序(判断题1分,选择题3分,共计37分) 判断题正确填 `T`,错误填 `F`。 ### 第1题 ```cpp void recursion(int n) { if (n == 0) return; int lowbit = n % 3; recursion(n / 3); std::cout << lowbit; } void iteration(int n) { int buffer[10]; int size = 0; while (n > 0) { buffer[size++] = n % 3; n = n / 3; } while (size > 0) { std::cout << buffer[--size]; } } ```
16. 珅泽教育CSP-J第一轮模拟考第二套 第 16 题 17. 珅泽教育CSP-J第一轮模拟考第二套 第 17 题 18. 珅泽教育CSP-J第一轮模拟考第二套 第 18 题 19. 珅泽教育CSP-J第一轮模拟考第二套 第 19 题 20. 珅泽教育CSP-J第一轮模拟考第二套 第 20 题
### 第2题 ```cpp int solve1(int n) { int s = 0; int f = 1; for (int i = 1; i <= n; ++i) { f = f * i; int m = f; while (m % 10 == 0) { s++; m = m / 10; } } return s; } int solve2(int n) { int t = 0; while (n > 0) { t = t + n / 5; n = n / 5; } return t; } ```
21. 珅泽教育CSP-J第一轮模拟考第二套 第 21 题 22. 珅泽教育CSP-J第一轮模拟考第二套 第 22 题 23. 珅泽教育CSP-J第一轮模拟考第二套 第 23 题 24. 珅泽教育CSP-J第一轮模拟考第二套 第 24 题 25. 珅泽教育CSP-J第一轮模拟考第二套 第 25 题 26. 珅泽教育CSP-J第一轮模拟考第二套 第 26 题
### 第三题 ```cpp #include<iostream> int play[3][3] = {0}; int score[3][3]; bool check_row(int i, int role) { if (play[i][0] != role) return false; if (play[i][1] != role) return false; if (play[i][2] != role) return false; return true; } bool check_col(int j, int role) { if (play[0][j] != role) return false; if (play[1][j] != role) return false; if (play[2][j] != role) return false; return true; } bool check_diag(int role) { if (play[1][1] != role) return false; if (play[0][0] == role && play[2][2] == role) return true; if (play[0][2] == role && play[2][0] == role) return true; return false; } bool check(int i, int j, int role) { return check_row(i, role) || check_col(j, role) || check_diag(role); } int adv(int step) { if (step == 9) return 0; int role = (step % 2) + 1; const int inf = 1000000000; int best = -inf; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (play[i][j] == 0) { play[i][j] = role; if (check(i, j, role)) { best = inf; } else { int test = score[i][j] - adv(step + 1); if (best < test) { best = test; } } play[i][j] = 0; } } } return best; } int main() { for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) std::cin >> score[i][j]; int d = adv(0); if (d > 0) std::cout << "First Win\n"; else std::cout << "Second Win\n"; } ```
27. 珅泽教育CSP-J第一轮模拟考第二套 第 27 题 28. 珅泽教育CSP-J第一轮模拟考第二套 第 28 题 29. 珅泽教育CSP-J第一轮模拟考第二套 第 29 题 30. 珅泽教育CSP-J第一轮模拟考第二套 第 30 题 31. 珅泽教育CSP-J第一轮模拟考第二套 第 31 题 32. 珅泽教育CSP-J第一轮模拟考第二套 第 32 题 33. 珅泽教育CSP-J第一轮模拟考第二套 第 33 题 34. 珅泽教育CSP-J第一轮模拟考第二套 第 34 题
## 三、完善程序(单选题,每小题3分,共计33分) ### 第1题 有 $n$ 名学生参加了一场考试,分数没有公开。现有 $m$ 条线索,其中第 $i$ 条线索确定第 $x_i$ 号学生的分数高于第 $y_i$ 号学生。又确定没有人分数是相同的。根据这些线索,将学生的分数排序后,多少人的名次是可以确定的呢?保证给定的线索没有矛盾。 ```cpp #include<iostream> int main() { const int maxn = 100; bool f[maxn][maxn] = {false}; int c[maxn] = {0}; int n, m; std::cin >> n >> m; for (int i = 0; i < m; ++i) { int x, y; std::cin >> x >> y; ____(1)____; } for (int _(2)_ = 0; _(2)_ < n; ++ _(2)_) for (int _(3)_ = 0; _(3)_ < n; ++ _(3)_) for (int _(4)_ = 0; _(4)_ < n; ++ _(4)_) if (____(5)____) f[i][j] = true; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) if (i != j) if (___(6)___) c[i]++; int ans = 0; for (int i = 0; i < n; ++i) if (___(7)___) ans ++; std::cout << ans << '\n'; } ```
35. 珅泽教育CSP-J第一轮模拟考第二套 第 35 题 36. 珅泽教育CSP-J第一轮模拟考第二套 第 36 题 37. 珅泽教育CSP-J第一轮模拟考第二套 第 37 题 38. 珅泽教育CSP-J第一轮模拟考第二套 第 38 题 39. 珅泽教育CSP-J第一轮模拟考第二套 第 39 题
### 第2题 给定 $n$ 个整数 $a_0,a_1,\ldots,a_{n-1}$,其中 $1\le n\le40$,请统计,这个序列有多少种子序列,其子序列的和大于 $0$? ```cpp #include<iostream> #include<algorithm> int a[40]; int x[1 << 20]; int y[1 << 20]; int generate(int begin, int end, int sum, int* out, int pos) { if (begin == end) { ____(1)____; return 1; } else { int f = generate(begin + 1, end, sum + a[begin], out, pos); int s = generate(begin + 1, end, ____(2)____); return f + s; } } int main() { int n; std::cin >> n; for (int i = 0; i < n; ++i) std::cin >> a[i]; int x_size = ____(3)____; int y_size = ____(4)____; std::sort(x, x + x_size); std::sort(y, y + y_size); int j = y_size; long long pair = 0; for (int i = 0; i < x_size; ++i) { while (j > 0 && ____(5)____) { j--; } pair += ____(6)____; } std::cout << pair << "\n"; } ```
40. 珅泽教育CSP-J第一轮模拟考第二套 第 40 题 41. 珅泽教育CSP-J第一轮模拟考第二套 第 41 题 42. 珅泽教育CSP-J第一轮模拟考第二套 第 42 题 43. 珅泽教育CSP-J第一轮模拟考第二套 第 43 题 44. 珅泽教育CSP-J第一轮模拟考第二套 第 44 题 45. 珅泽教育CSP-J第一轮模拟考第二套 第 45 题