描述
题目描述
首先会给定我们一个的一个二维数组, 然后我们要进行以下的操作, 最大是的
然后我们判断我们下面的五种操作, 如果可以实现输出, 如果不可以实现输出
- 初始化一个的二维数组
- 输入, 然后我们交换和
- 输入, 在第行的上方添加一行
- 输入, 在第列左边添加一列
- 输入, 查找坐标
题解
解法一: 直接模拟
实现思路
我们可以直接简单的取一个个的比较模拟, 其实关键就是这么几个点
- 数据表行列范围都是[0, 9]
- 交换的坐标行列数要在输入的表格大小行列数范围[0, m) x [0, n)内
- 插入的 x 位置要在 [0, m) 范围内,插入的 y 位置要在 [0, n) 范围内, 并且列和行不能超过9
- 要检查的位置 (x, y) 要在 [0, m) x [0, n) 内
图解代码
代码实现
#include <bits/stdc++.h>
using namespace std;
signed main() {
int n, m, x1, y1, x2, y2, xi, yi, x, y;
while (cin >> n >> m >> x1 >> y1 >> x2 >> y2 >> xi >> yi >> x >> y) {
if (n >= 0 && n <= 9 && m >= 0 && m <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
// 判断数据表的范围是否正确
if (x1 >= 0 && x1 < n && y1 >= 0 && y1 < m && x2 >= 0 && x2 < n && y2 >= 0 && y2 < m) {
cout << "0\n";
} else {
cout << "-1\n";
}
// 判断我们交换的数据是否在我们的数据表中
if (xi >= 0 && xi < n && n + 1 <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
if (yi >= 0 && yi < m && m + 1 <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
// 判断我们插入的元素是否满足范围
if (x >= 0 && x < n && y >= 0 && y < m) {
cout << "0\n";
} else {
cout << "-1\n";
}
// 判断我们查找的元素是否正确
}
return 0;
}
时空复杂度分析
时间复杂度:
理由如下: 我们直接进行的判断
空间复杂度:
理由如下: 只是使用了常数级别的空间
解法二: C++的类的思想
实现思路
我们可以使用C++的类的思想, 我们把我们的这个操作封装成一个类, 我们每一次都是对一个类进行一个操作
代码实现
#include <bits/stdc++.h>
using namespace std;
class Martix {
protected:
int n, m, x1, y1, x2, y2, xi, yi, x, y;
public:
Martix() {}
Martix(int n_, int m_, int x1_, int y1_, int x2_, int y2_, int xi_, int yi_,
int x_, int y_)
: n(n_), m(m_), x1(x1_), y1(y1_), x2(x2_), y2(y2_), xi(xi_), yi(yi_), x(x_), y(y_){}
// 判断初始化是否满足条件
void init() {
if (n >= 0 && n <= 9 && m >= 0 && m <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
}
// 检验交换的数据是否满足条件
void checkSwap() {
if (x1 >= 0 && x1 < n && y1 >= 0 && y1 < m && x2 >= 0 && x2 < n && y2 >= 0 && y2 < m) {
cout << "0\n";
} else {
cout << "-1\n";
}
}
// 检查插入的数据是否满足条件
void checkInsert() {
if (xi >= 0 && xi < n && n + 1 <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
if (yi >= 0 && yi < m && m + 1 <= 9) {
cout << "0\n";
} else {
cout << "-1\n";
}
}
// 检查查找的元素是否正确
void checkSerch() {
if (x >= 0 && x < n && y >= 0 && y < m) {
cout << "0\n";
} else {
cout << "-1\n";
}
}
};
signed main() {
int n, m, x1, y1, x2, y2, xi, yi, x, y;
while (cin >> n >> m >> x1 >> y1 >> x2 >> y2 >> xi >> yi >> x >> y) {
Martix martix(n, m, x1, y1, x2, y2, xi, yi, x, y);
martix.init();
martix.checkSwap();
martix.checkInsert();
martix.checkSerch();
}
return 0;
}
时空复杂度分析
时间复杂度:
理由如下: 我们直接进行的判断
空间复杂度:
理由如下: 只是使用了常数级别的空间