C++题目50: 设计一个新的数列类,最多可容纳500个整型元素。除了在外部给定数列元素外,具有查询子数列片段的功能。在主函数中以m a1,a2,a3...am的格式输入m个初始数列(第一个数为数列初始长度,后面m个数分别为m个数列元素),然后读取要查找的子数列,格式同完整数列,n,b1,b2,b3…bn。调用数列的设定方法保存完整数列,调用子数列查找方法返回子数列在完整数列中的起始位置(位置从0开始),如不存在,则返回-1,在主函数中输出查找结果。
时间: 2023-12-29 07:03:23 浏览: 86
以下是题目的完整代码实现,注释中有详细的解释:
```c++
#include <iostream>
using namespace std;
class Sequence {
private:
int data[500]; // 数列
int length; // 数列长度
public:
Sequence() {
length = 0;
}
void setData(int len, int *arr) { // 设置数列
length = len;
for (int i = 0; i < length; i++) {
data[i] = arr[i];
}
}
int find(int n, int *arr) { // 查找子数列
if (n > length) { // 子数列长度大于数列长度,直接返回-1
return -1;
}
for (int i = 0; i <= length - n; i++) { // 从数列头开始遍历,逐个判断是否存在该子数列
bool isFind = true; // 标记是否找到该子数列
for (int j = 0; j < n; j++) {
if (data[i+j] != arr[j]) { // 如果存在不同的数,则表示该子数列不存在于该位置
isFind = false;
break;
}
}
if (isFind) { // 如果找到该子数列,返回该子数列在数列中的起始位置
return i;
}
}
return -1; // 未找到该子数列,返回-1
}
};
int main() {
int m, n;
Sequence seq;
int arr[500];
cin >> m;
for (int i = 0; i < m; i++) { // 读取完整数列
cin >> arr[i];
}
seq.setData(m, arr); // 设置数列
cin >> n;
for (int i = 0; i < n; i++) { // 读取子数列
cin >> arr[i];
}
int pos = seq.find(n, arr); // 查找子数列
cout << pos << endl; // 输出结果
return 0;
}
```
阅读全文