规则:在该行上最大,在该列上最小,也可能没有鞍点。
就像这个马鞍一样,在弧度向上的角度看,中心点是最低点,在弧度向下的角度看,中心点是最高点。
#include <stdio.h>
#include <stdlib.h>
#define M 3 //行
#define N 4 //列
int main()
{
int arr[M][N],an,pos,flag=0;
int i,j;
printf("请输入%d行,%d列的数:\n",M,N);
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
scanf("%d",&arr[i][j]); //遍历输入数组元素
}
}
for(i=0;i<M;i++)
{
an=arr[i][0]; //给鞍赋初值
for(j=0;j<N;j++)
{
if(arr[i][j]>an)
{
an=arr[i][j]; //寻找该行的最大值
pos=j; //记录该列
}
}
for(j=0;j<M;j++)
{
if(arr[j][pos]<an) //遍历比较该列,有没有比鞍还小的数
{
break; //如果有就跳出循环
}
}
if(j==M) //如果该列的元素比较完后
{
printf("鞍点为%d\n",arr[j][pos]); //该列最小的数是鞍的话,则输出鞍点
flag=1;
break;
}
}
if(0==flag) //当循环完毕,flag没有变成1,则说明该二维数组没有鞍点
{
printf("没有鞍点\n");
}
return 0;
}