/*找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点*/
#include <stdio.h>
#define N 3
#define M 3
int main()
{
int a[N][M];
int i,j,an,b,min,flag = 0;
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++)
{
an = a[i][0];
b = 0;
for(j = 1;j < N;j++)//找出行最大的数
{
if(a[i][j] > an)
{
an = a[i][j];//假设这个是鞍点
b = j;//记录列号
}
}
min = a[0][b];//找出假设鞍点的那一列的最小值
for(j = 1;j < M;j++)
{
if(a[j][b] < min)
{
min = a[j][b];
}
}
if(min == an)//两点比较,相等就是鞍点
{
printf("鞍点:%d",an);
flag = 1;
}
}
if(flag == 0)
printf("没有找到鞍点");
}
谭浩强C程序设计(第四版)p169第8题
思路:
找到某一行的最大值,再找到最大值这一列里面的最小值,然后两数比较,如果相等,就是鞍点,设置标志位可以方便输出是否有鞍点