C++ 算法:查找数阵中的马鞍数
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 著作权归作者所有。请勿转载和采集!