题目描述
在矩阵中,一个元素在所在行中是最大值,在所在列中是最小值,则被称为鞍点(Saddle point)。求所给矩阵的鞍点 请根据提示,在右侧编辑器补充代码,用户输入两个正整数 m 和 n(m,n≤10),然后输入该 m 行 n 列矩阵 mat 中的元素,如果找到 mat 的鞍点,就输出它的下标;如果找到多个鞍点,则分行输出它们的下标(行下标小的鞍点优先输出);否则,输出“Not Found”。
案例代码
以下是您所描述的问题的解决方案的C++代码实现:
#include <iostream>
using namespace std;
int main() {
int m, n;
cout << "请输入矩阵的行数 m 和列数 n(m、n≤10):" << endl;
cin >> m >> n;
int mat[10][10];
cout << "请输入矩阵元素:" << endl;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> mat[i][j];
}
}
bool found = false;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
// 检查当前元素是否是所在行的最大值
bool isRowMax = true;
for (int k = 0; k < n; ++k) {
if (mat[i][k] > mat[i][j]) {
isRowMax = false;
break;
}
}
// 检查当前元素是否是所在列的最小值
bool isColMin = true;
for (int k = 0; k < m; ++k) {
if (mat[k][j] < mat[i][j]) {
isColMin = false;
break;
}
}
// 如果是鞍点,输出其下标
if (isRowMax && isColMin) {
cout << "鞍点位置:" << i << " " << j << endl;
found = true;
}
}
}
if (!found) {
cout << "Not Found" << endl;
}
return 0;
}
该程序首先要求用户输入矩阵的行数 m 和列数 n,然后输入矩阵的元素。接下来,它会遍历矩阵中的每一个元素,检查是否满足鞍点的条件:即在所在行中是最大值,且在所在列中是最小值。如果找到鞍点,则输出其下标;如果找到多个鞍点,则分行输出它们的下标;如果找不到鞍点,则输出“Not Found”。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END