开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共 $15$ 题,每题 $2$ 分,共计 $30$ 分;每题有且仅有一个正确选项)
第 1–15 题 · 共 15 题
### 判断题
第 16–18 题 · 共 3 题
### 单选题
第 19–20 题 · 共 2 题
### 判断题
第 21–23 题 · 共 3 题
### 单选题
第 24–26 题 · 共 3 题
### 判断题
第 27–29 题 · 共 3 题
### 单选题
第 30–32 题 · 共 3 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
第 33–33 题 · 共 1 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
1. (寻找被移除的元素)问题: 原有长度为 $n+1$ 公差为 $1$ 等差数列,将数列输到程序的数组时移除了一个元素,导致长度为 $n$ 的连续数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。试补全程序。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int find_missing(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right){
int mid = left + (right - left) / 2;
if (nums[mid] == mid + ①) {
②;
} else {
③;
}
}
return ④;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) cin >> nums[i];
int missing_number = find_missing(nums);
if (missing_number == ⑤) {
cout << "Sequence is consecutive" << endl;
}else{
cout << "Missing number is " << missing_number << endl;
}
return 0;
}
```
第 34–37 题 · 共 4 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
第 38–38 题 · 共 1 题
2. (编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int min(int x, int y, int z) {
return min(min(x, y), z);
}
int edit_dist_dp(string str1, string str2) {
int m = str1.length();
int n = str2.length();
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0)
dp[i][j] = ①;
else if (j == 0)
dp[i][j] = ②;
else if (③)
dp[i][j] = ④;
else
dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤);
}
}
return dp[m][n];
}
int main() {
string str1, str2;
cin >> str1 >> str2;
cout << "Mininum number of operation:" << edit_dist_dp(str1, str2) << endl;
return 0;
}
```
第 39–42 题 · 共 4 题
展开逐题清单(单独练某一道)
● 绿=已通过 ● 橙=做过没全对 ● 灰=没做过
## 一、单项选择题(共 $15$ 题,每题 $2$ 分,共计 $30$ 分;每题有且仅有一个正确选项)
1.
[CSP2023 入门级] 第 1 题
2.
[CSP2023 入门级] 第 2 题
3.
[CSP2023 入门级] 第 3 题
4.
[CSP2023 入门级] 第 4 题
5.
[CSP2023 入门级] 第 5 题
6.
[CSP2023 入门级] 第 6 题
7.
[CSP2023 入门级] 第 7 题
8.
[CSP2023 入门级] 第 8 题
9.
[CSP2023 入门级] 第 9 题
10.
[CSP2023 入门级] 第 10 题
11.
[CSP2023 入门级] 第 11 题
12.
[CSP2023 入门级] 第 12 题
13.
[CSP2023 入门级] 第 13 题
14.
[CSP2023 入门级] 第 14 题
15.
[CSP2023 入门级] 第 15 题
### 判断题
16.
[CSP2023 入门级] 第 16 题
17.
[CSP2023 入门级] 第 17 题
18.
[CSP2023 入门级] 第 18 题
### 单选题
19.
[CSP2023 入门级] 第 19 题
20.
[CSP2023 入门级] 第 20 题
### 判断题
21.
[CSP2023 入门级] 第 21 题
22.
[CSP2023 入门级] 第 22 题
23.
[CSP2023 入门级] 第 23 题
### 单选题
24.
[CSP2023 入门级] 第 24 题
25.
[CSP2023 入门级] 第 25 题
26.
[CSP2023 入门级] 第 26 题
### 判断题
27.
[CSP2023 入门级] 第 27 题
28.
[CSP2023 入门级] 第 28 题
29.
[CSP2023 入门级] 第 29 题
### 单选题
30.
[CSP2023 入门级] 第 30 题
31.
[CSP2023 入门级] 第 31 题
32.
[CSP2023 入门级] 第 32 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
33.
[CSP2023 入门级] 第 33 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
1. (寻找被移除的元素)问题: 原有长度为 $n+1$ 公差为 $1$ 等差数列,将数列输到程序的数组时移除了一个元素,导致长度为 $n$ 的连续数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。试补全程序。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int find_missing(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right){
int mid = left + (right - left) / 2;
if (nums[mid] == mid + ①) {
②;
} else {
③;
}
}
return ④;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) cin >> nums[i];
int missing_number = find_missing(nums);
if (missing_number == ⑤) {
cout << "Sequence is consecutive" << endl;
}else{
cout << "Missing number is " << missing_number << endl;
}
return 0;
}
```
34.
[CSP2023 入门级] 第 34 题
35.
[CSP2023 入门级] 第 35 题
36.
[CSP2023 入门级] 第 36 题
37.
[CSP2023 入门级] 第 37 题
## 三、完善程序(单选题,每小题 $3$ 分,共计 $30$ 分)
38.
[CSP2023 入门级] 第 38 题
2. (编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int min(int x, int y, int z) {
return min(min(x, y), z);
}
int edit_dist_dp(string str1, string str2) {
int m = str1.length();
int n = str2.length();
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0)
dp[i][j] = ①;
else if (j == 0)
dp[i][j] = ②;
else if (③)
dp[i][j] = ④;
else
dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤);
}
}
return dp[m][n];
}
int main() {
string str1, str2;
cin >> str1 >> str2;
cout << "Mininum number of operation:" << edit_dist_dp(str1, str2) << endl;
return 0;
}
```
39.
[CSP2023 入门级] 第 39 题
40.
[CSP2023 入门级] 第 40 题
41.
[CSP2023 入门级] 第 41 题
42.
[CSP2023 入门级] 第 42 题