P166 8.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。一个二维数组最多有一个,也可能没有鞍点
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define N 4//规定数组为a[4][5]
#define M 5
int main() {
int i, j, k, max, maxj, flag;
int a[N][M] = {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++) {
max = a[i][0]; //假设a[i][0](每行第一个)最大
maxj = 0; //记下每行最大值的列号
for (j = 0; j < M; j++) {
//求出i行中的最大值并记录列号
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;
break;
}
}
if (flag) {
printf("该二维数组的鞍点为:");
printf("a[%d][%d]=%d", i, maxj, max);
break;
}
}
if(!flag) {
printf("该二维数组没有鞍点!\n");
}
return 0;
}
运行结果: