描述
给定一个二维数组,找出其中的鞍点。若存在鞍点,则输出其位置;否则输出“NO”。
鞍点的定义:在一个矩阵的行和列中,某个元素是所在行的最大值,而同列中又是最小值。
输入
输入包含多行,每一行包含多个整数,用空格分隔。第一行为两个正整数 n 和 m,表示该矩阵有 n 行,m 列。接下来的 n 行,每行 m 个整数,表示该矩阵的元素。
输出
输出一个包含两个整数的一行,表示鞍点的位置。第一个数字表示行,第二个数字表示列。如果不存在鞍点,则输出 NO。
输入样例 1
3 4 9 80 205 40 90 -60 96 1 210 -3 101 89
输出样例 1
2 3
输入样例 2 文章来源:https://www.toymoban.com/news/detail-635041.html
4 4 9 80 205 40 90 -60 196 1 210 -3 101 89 45 54 156 7
输出样例 2文章来源地址https://www.toymoban.com/news/detail-635041.html
NO
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int a[50][50];
int i, j, k,t;
bool andian = false;
for ( i = 1; i <= n; i++)
{
for ( j = 1; j <= m; j++)
{
cin >> a[i][j];
}
}
for ( i = 1; i <= n; i++)
{
t = 1;
for ( j = 2; j <= m; j++) //找出第i行中的最大值
{
if (a[i][t] < a[i][j])
{
t = j;
}
}
for (k = 1;k < n ; k++) //a[i][t]为第i行的最大值,将其与第t列的除本身外的数相比较
{
if (k == i)continue;
else if (a[i][t] < a[k][t])andian = true; //所有比较下来结果都是a[i][t]在第t列中最小则bool类型为true
else
{
andian = false; break; //如果不是最小的,则结束该小的for循环,重新开始大的for循环
}
}
if (andian)break; //如果找到鞍点则结束该大循环
}
if (andian)cout << i << " " << t; //找到鞍点则输出其位置
else cout << "NO"; //没有鞍点则输出NO
return 0;
}
到了这里,关于二维数组的鞍点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!