【问题描述】
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。
【输入形式】
第一行输入n,m,表示数组的大小
第二行开始,依次输入数组元素
【输出形式】
如果数组存在鞍点,则输出鞍点上的元素值;否则输出“ It does not exist! ”
【样例输入】
4 5
6 5 4 2 3
5 9 4 2 8
4 9 9 9 4
9 1 9 4 8
【样例输出】
It does not exist!
【样例输入】
4 5
6 5 14 2 3
5 9 24 2 8
4 9 19 9 4
9 1 29 4 8
【样例输出】
14
【样例说明】
【评分标准】
1 ≤ n, m ≤ 10,矩阵中的数都是不超过100的非负整数
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n][m];
for(int x=0;x<n;x++)
{
for(int y=0;y<m;y++) //将数据输入二维数组
{
cin>>a[x][y];
}
}
int t,l=0,num=0,z=-1; //定义t为结果值,z为判断值
for(int i=0;i<n;i++) //先行后列进行n次对鞍点的判断
{
t=a[i][0],num=0,l=0; //重点:计数归零
for(int y=1;y<m;y++) //先在行中判断找出最大的数
{
if(t<a[i][y]) t=a[i][y], l=y; //用l记住最大值的位置
}
for(int x=1;x<n;x++) //判断列上是否为最小值
{
if(x==i) continue; //遇到该取值位置跳过
else
{
if(a[i][l]>a[x][l]) num++; //当其不为最小值,计数加一
}
}
if(num==0) z=t,cout<<t; //得到鞍点输出
}
if(z<0) //无鞍点,输出
cout<<"It does not exist!";
return 0;
}