找出具有m行n列二维数组array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。
时间: 2023-05-31 20:20:22 浏览: 329
### 回答1:
鞍点是指一个矩阵中的一个元素,在该行上是最大的,在该列上是最小的。要找出具有m行n列二维数组array的鞍点,需要遍历每一个元素,找到满足条件的元素即可。具体步骤如下:
1. 遍历每一个元素,对于每一个元素,找到该元素所在的行和列。
2. 在该行上找到最大的元素,如果该元素就是当前元素,则继续执行下一步,否则跳过该元素。
3. 在该列上找到最小的元素,如果该元素就是当前元素,则说明找到了一个鞍点,输出该元素的位置和值,否则跳过该元素。
4. 如果遍历完所有元素都没有找到鞍点,则输出“不存在鞍点”。
注意:同一行和同一列没有相同的数,因此在找到最大或最小元素时,需要跳过当前元素。
### 回答2:
鞍点是一个矩阵论的概念,对于一个 m 行 n 列的二维数组,如果这个数组中某个元素在所在行上是最大的,同时在所在列上是最小的,那么这个元素就叫做鞍点。而这道题要求我们找出这个二维数组中的所有鞍点。
首先,我们可以使用两个数组 rows 和 cols 来分别记录每行的最大值和每列的最小值。然后,我们依次遍历矩阵中的每一个元素,如果这个元素等于所在行的最大值并且等于所在列的最小值,那么这个元素就是一个鞍点。
具体步骤如下:
1.定义一个 m 行 n 列的二维数组 array,同时定义一个 rows 数组和一个 cols 数组,它们的长度分别为 m 和 n。
2.初始化 rows 数组和 cols 数组的所有元素为 0。
3.遍历二维数组 array 中的每个元素,依次比较这个元素和所在行的最大值、所在列的最小值。
4.如果这个元素等于所在行的最大值并且等于所在列的最小值,那么这个元素就是一个鞍点,记录其位置。
5.最后输出所有鞍点的位置。
代码如下:
```
int array[m][n];
int rows[m] = {0};
int cols[n] = {0};
vector<pair<int, int>> saddle_points; // 用一个 vector 存储所有鞍点的位置
// 遍历所有元素,更新 rows 和 cols 数组
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (array[i][j] > rows[i]) {
rows[i] = array[i][j];
}
if (array[i][j] < cols[j]) {
cols[j] = array[i][j];
}
}
}
// 再次遍历所有元素,找出所有鞍点
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (array[i][j] == rows[i] && array[i][j] == cols[j]) {
saddle_points.push_back(make_pair(i, j));
}
}
}
// 输出所有鞍点的位置
for (auto &point : saddle_points) {
cout << "(" << point.first << ", " << point.second << ")" << endl;
}
```
总之,这道题可以用两个数组来记录每行的最大值和每列的最小值,然后再遍历一次数组来寻找鞍点。处理起来比较简单,但是需要注意边界情况和数组初始化。
### 回答3:
所谓鞍点是指在矩阵中找到一个位置,这个位置在当前行上最大,且在当前列上最小。如果一个矩阵没有鞍点,则返回空。
首先,我们需要读取输入的m行n列二维数组array,以及m和n的值,以便后续的操作。同时,我们也需要定义变量来保存鞍点的坐标。
然后,我们可以使用两个循环来遍历整个二维数组,对于每一个位置,我们都需要判断该位置是否是鞍点。具体判断规则如下:
1. 找到当前行上的最大值和列上的最小值。
2. 判断当前位置上的元素是否等于当前行上的最大值和列上的最小值,如果是,则该位置是鞍点。
3. 如果没有找到鞍点,继续遍历后续的位置。
最后,输出找到的鞍点坐标,如果没有找到鞍点,则输出空。
以下是实现代码:
```
#include <iostream>
using namespace std;
int main() {
int m, n;
int array[10][10];
int x = -1, y = -1; // 鞍点坐标
// 读取m行n列二维数组array
cin >> m >> n;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> array[i][j];
}
}
// 遍历每一个位置
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int max_in_row = array[i][0];
int min_in_col = array[0][j];
// 找到当前行上的最大值
for (int k = 1; k < n; k++) {
if (array[i][k] > max_in_row)
max_in_row = array[i][k];
}
// 找到当前列上的最小值
for (int k = 1; k < m; k++) {
if (array[k][j] < min_in_col)
min_in_col = array[k][j];
}
// 判断是否为鞍点
if (array[i][j] == max_in_row && array[i][j] == min_in_col) {
x = i;
y = j;
break;
}
}
if (x >= 0 && y >= 0)
break;
}
// 输出鞍点坐标
if (x >= 0 && y >= 0)
cout << x << " " << y << endl;
else
cout << "null" << endl;
return 0;
}
```
阅读全文