思路:将矩阵存在一个二维数组中,先分别将每行的最小值和每列的最大值求出然后存入两个一维数组中,之后对矩阵进行遍历,若其等于行最小列最大则输出,同时用count记录马鞍点的个数,为0时输出no。题目不难,但需细心。
#include<stdio.h>
int main()
{
int m,n,i,j;
int count=0;
int num[100][100];
int a[100],b[100];
int min;
int max;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&num[i][j]);
}
for(i=0;i<m;i++)//求每行中最小
{
min=1000;
for(j=0;j<n;j++)
{
if(num[i][j]<min)
min=num[i][j];
}
a[i]=min;
}
for(j=0;j<n;j++)//求每列中最大
{
max=-1000;
for(i=0;i<m;i++)
{
if(num[i][j]>max)
max=num[i][j];
}
b[j]=max;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(num[i][j]==a[i]&&num[i][j]==b[j])
{
printf("%d %d %d\n",i+1,j+1,num[i][j]);//若其等于行最小列最大则输出
count++;//记录个数
}
}
}
if(count==0)
printf("no");
return 0;
}