题目描述
找出二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也有可能没有鞍点。
输入格式:
输入4行4列的整型二维数组。
输出格式:
若有鞍点,输入鞍点以及其位置;若没有鞍点,输出“It is not exist!”。
输入样例1:
在这里给出一组输入。例如:
2 3 9 5
6 7 8 3
0 5 7 5
2 1 8 3
输出样例1:
在这里给出相应的输出。例如:
a[2][2]=7
输入样例2:
在这里给出一组输入。例如:
2 3 9 5
6 7 8 3
1 5 6 7
2 1 8 3
输出样例2:
在这里给出相应的输出。例如:
It is not exist!
代码:
#include <stdio.h>
#define ROWS 4
#define COLS 4
int main() {
int a[ROWS][COLS];
int i, j, k;
int maxRow[ROWS], minCol[COLS];
// 输入二维数组
for (i = 0; i < ROWS; ++i) {
for (j = 0; j < COLS; ++j) {
scanf("%d", &a[i][j]);
}
}
// 找出每一行的最大值和每一列的最小值
for (i = 0; i < ROWS; ++i) {
maxRow[i] = a[i][0];
for (j = 1; j < COLS; ++j) {
if (a[i][j] > maxRow[i]) {
maxRow[i] = a[i][j];
}
}
}
for (j = 0; j < COLS; ++j) {
minCol[j] = a[0][j];
for (i = 1; i < ROWS; ++i) {
if (a[i][j] < minCol[j]) {
minCol[j] = a[i][j];
}
}
}
// 检查是否存在鞍点
int found = 0;
for (i = 0; i < ROWS && !found; ++i) {
for (j = 0; j < COLS && !found; ++j) {
if (maxRow[i] == a[i][j] && minCol[j] == a[i][j]) {
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
found = 1;
}
}
}
// 如果没有找到鞍点,则输出“It is not exist!”
if (!found) {
printf("It is not exist!\n");
}
return 0;
}