C++ 算法:查找数阵中的马鞍数

**问题描述:**

求一个 n 行 m 列数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。例如:

n=5 m=5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8

则1行1列上的数就是马鞍数。

**输入:**

共 n+1 行,第一行:nm(n,m<10)

第2到n+1行:每行 m 个整数(每个数都<10)

**输出:**

输出若干行:如果存在马鞍数,则输出所有马鞍数,每行一个,为行和列以及马鞍数。

如果不存在马鞍数,则输出“not exit”。

**示例:**

样例 1:

**输入:**

5 5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8

**输出:**

3 4 2

样例 2:

**输入:**

3 4
1 2 3 4
5 6 7 8
9 10 11 12

**输出:**

not exit

样例 3:

**输入:**

4 3
2 3 4
1 5 6
7 8 9
10 11 12

**输出:**

1 2 3

样例 4:

**输入:**

2 2
1 1
1 1

**输出:**

not exit

样例 5:

**输入:**

4 4
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16

**输出:**

not exit

样例 6:

**输入:**

3 3
1 2 3
3 1 2
2 3 1

**输出:**

1 1 1
2 2 1
3 3 1

样例 7:

**输入:**

5 5
3 4 7 6 2
1 8 5 4 3
2 5 9 7 1
6 3 4 5 6
7 6 7 8 3

**输出:**

1 3 7

样例 8:

**输入:**

4 5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

**输出:**

not exit

样例 9:

**输入:**

3 5
1 4 3 2 5
4 2 1 5 3
3 5 3 1 4

**输出:**

2 4 5

样例 10:

**输入:**

5 3
1 2 3
4 5 6
7 8 9
9 7 8
5 6 4

**输出:**

not exit

**代码实现:**

#include <iostream>using namespace std;

int main() { int n, m; cin >> n >> m; int a[10][10]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } bool flag = false; for (int i = 0; i < n; i++) { bool isMin = true; for (int j = 0; j < m; j++) { if (a[i][j] > a[i][0]) { isMin = false; break; } } if (isMin) { bool isMax = true; for (int k = 0; k < n; k++) { if (a[i][0] < a[k][0]) { isMax = false; break; } } if (isMax) { cout << i + 1 << ' ' << 1 << ' ' << a[i][0] << endl; flag = true; } } } if (!flag) { cout << 'not exit' << endl; } return 0;}

注意:

代码中的数组大小为 10x10,可以根据实际需求进行调整。

代码说明:

1. 输入 n 和 m,以及 n 行 m 列的数阵。

2. 遍历数阵,判断每个数是否满足马鞍数的条件:

- 判断该数是否为所在行的最小值。

- 判断该数是否为所在列的最大值。

3. 如果找到马鞍数,输出其行号、列号和数值。

4. 如果没有找到马鞍数,输出 'not exit'。

希望这篇文章对您有所帮助!


原文地址: https://www.cveoy.top/t/topic/p5nz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录