【问题描述】在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。任意输入一个3行3列矩阵,请设计程序输出其鞍点。
【输入形式】每行3个数,输入3列
【输出形式】输出所有鞍点;如果没有鞍点,输出“No”
【样例输入1】
7 8 9
4 5 10
3 2 11
【样例输出1】[0][2],9
【样例输入2】
3 3 2
4 6 8
5 7 9
【样例输出2】
[0][0],3
[0][1],3
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<vector<int>> matrix(3, vector<int>(3));
// 输入矩阵
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> matrix[i][j];
}
}
bool foundSaddlePoint = false;
// 查找鞍点
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
int current = matrix[i][j];
bool isRowMax = true;
bool isColMin = true;
// 检查是否是所在行的最大值
for (int k = 0; k < 3; ++k) {
if (matrix[i][k] > current) {
isRowMax = false;
break;
}
}
// 检查是否是所在列的最小值
for (int k = 0; k < 3; ++k) {
if (matrix[k][j] < current) {
isColMin = false;
break;
}
}
// 如果是鞍点,输出
if (isRowMax && isColMin) {
cout << "[" << i << "][" << j << "]," << current << endl;
foundSaddlePoint = true;
}
}
}
// 如果没有找到鞍点,输出 "No"
if (!foundSaddlePoint) {
cout << "No" << endl;
}
return 0;
}