版权声明:本文为博主原创文章,请勿转载。 https://blog.csdn.net/Neil_Wesley/article/details/51500896
一、什么是鞍点呢?
在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。
二、代码实现
1、方法一:
方法一:
// Created by Neil Wesley on 16/5/25.
// Copyright © 2016年 Neil Wesley. All rights reserved.
//
#include "stdio.h"
int main()
{
int a[4][4],i,j,k;
printf("Please input array a:");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("\n your array is:");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
if(a[i][j]>=a[i][k]&&a[i][j]<=a[k][j])
continue;
else
break;
}
if(k==4)
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
}
}
2、方法二:
方法二:
// Created by Neil Wesley on 16/5/25.
// Copyright © 2016年 Neil Wesley. All rights reserved.
//
#include "stdio.h"
int main()
{
int a[4][5],i,j,n,m;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
for(m=0;m<5;m++)
{
if(a[i][j]>=a[i][m])
continue;
else
break;
}
if(m==5)
{
for(n=0;n<4;n++)
{
if(a[i][j]<=a[n][j])
continue;
else
break;
}
if(n==4)
printf("%3d",a[i][j]);
}
}
}
3、方法三:
方法三:
void main()
{
int i,j,k,a[N][M],max,maxj,flag;
printf("输入数组:\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]; //*开始时假设a[i][0]最大
maxj=0; //*将列号0赋值给maxj保存
for(j=0;j<M;j++) //*找出第i行中的最大数
if(a[i][j]>max)
{
max=a[i][j]; //*将本行的最大数保存在max中
maxj=j; //*将最大数所在的列号保存在maxj中
}
flag=1; //*先假设是鞍点,用flag为1代表
for(k=0;k<N;k++)
if(max>a[k][maxj]) //*将最大数和其同列元素相比
{
flag=0; //*如果max不是同列最小,表示不是鞍点,令flag=0
continue;
}
if(flag) //*如果flag为1表示是鞍点
{
printf("a[%d][%d]=%d\n",i,maxj,max); //*输出鞍点值和所在行号列号
break;
}
}
if(!flag) //*如果flag为0表示鞍点不存在
printf("鞍数不存在!");
}