【问题描述】
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。
【输入形式】
第一行输入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
【示例代码】
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m,n,i=0,j=0,k=0,row=0,colum=0,max=0,min=0,t=0,f=0;
cin>>n>>m;
int a[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<n;i++)
{
max=a[i][0];
int b[m];
for(j=0;j<m;j++)//寻找每一行的最大值
{
b[m]=a[i][j];
if(a[i][j]>max)
{
max=a[i][j];
colum=j;
row=i;
}
}
sort(b,b+m);
if(b[m-1]==b[m-2]) {continue;}//排除最大值为众数的情况
else
{
for(k=0;k<n;k++)//判断是否为列的最小值
{
min=a[row][colum];
if(k!=row&&a[k][colum]<=min)
{
t=0;
break;
}
else {t=1;}
}
if(t==1) {f=1;cout<<a[row][colum]<<endl;}
}
}
if(t==0&&f==0) cout<<"It does not exist!"<<endl;
return 0;
}