“鞍点”的定义:二维数组中,一个元素在所在行上最大,在所在列上最小,这个元素我们把它叫做“鞍点”
算法思想:
先找出一行中值最大的元素maxj,然后检查它是否为该列中的最小值,
如果是,则是鞍点;break;输出该鞍点;
如果不是,再找下一行的最大数……如果每一行的最大数都不是鞍点,则此数组无鞍点。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#define N 4
#define M 5
//鞍点:行上最大,列上最小
int main()
{
int i,j,k,a[N][M],max,maxj,flag;
printf("请向二维数组中输入20个数据,以空格分隔,5个一行,输入完一行按回车进下一行:\n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)scanf("%d",&a[i][j]);
}
for(i=0;i<N;i++)
{
max=a[i][0];
maxj=0;
for(j=0;j<M;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
}
for(k=0;k<N;k++)
{
if(max>a[k][maxj])
{
flag=0;continue;
}
}
if(flag)
{
printf("鞍点在第%d行,第%d列,其值为%d",i,maxj,max);
break;
}
if(!flag)//!flag为真就等价于flag==0,即没有找到鞍点
{
printf("该二维数组中不存在鞍点");
break;
}
}
return 0;
}
如有问题欢迎随时与我沟通。