找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能是没有鞍点。
#include<stdio.h>
#define M 3
#define N 4
int main()
{
int array[M][N];
int i, j, max = 0, pos = 0, flag = 0;
printf("请输入%d行%d列的二维数组:\n",M,N);
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
scanf_s("%d", &array[i] [j]);
}
}
//找鞍点
for (i = 0; i < M; i++) {
//找该行上最大的元素,并记录其所在的列号
max = array[i][0];
for (j = 1; j < N; j++) {
if (array[i][j] > max) {
max = array[i][j];
pos = j;
}
}
//确认该元素是否为该列上最大的元素
for (j = 0; j < M; j++) {
if (array[j][pos] < max) {
break;
}
}
//如果pos列没有发现比max小的元素,说明max是pos列上最小的元素
if (j == M) {
//鞍点就找到了
printf("该鞍点为:%d行%d列%d\n", i+1, pos+1, array[i][pos]);
flag = 1;
break;
}
}
if (flag == 0) {
printf("没有鞍点\n");
}
return 0;
}