找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。
【输入形式】
第一行有2个正整数n和m,表示二维数组的高度和宽度,保证n和m均不超过50。
之后的n行每行有m个用空格隔开的整数,表示二维数组对应位置的值。
【输出形式】
当鞍点存在时,将每个鞍点的信息在一行内输出,输出三个用空格隔开的整数,分别为鞍点元素的值以及其所在的行号和列号,有多个鞍点时,按照元素读入的顺序进行输出。当鞍点不存在时,在一行内输出“NO”。
请注意不需要输出引号,并请注意行尾输出换行。
#include<stdio.h>
int main()
{
int n,m,i,j,sum=0;
scanf("%d",&n);
scanf("%d",&m);
int a[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
int max[n];
int min[m];
for(i=0;i<n;i++)
{
max[i]=a[i][0];
for(j=0;j<m;j++)
{
if(a[i][j]>max[i])
{
max[i]=a[i][j];
}
}
}
for(j=0;j<m;j++)
{
min[j]=a[0][j];
for(i=0;i<n;i++)
{
if(a[i][j]<min[j])
{
min[j]=a[i][j];
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]==max[i]&&a[i][j]==min[j])
{
printf("%d %d %d ",a[i][j],i,j);
sum++;
}
}
}
if(sum==0)
{
printf("NO");
}
}