找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。c语言
时间: 2024-05-10 11:18:37 浏览: 87
c语言寻找二维数组中的鞍点
以下是一个可能的解法,基本思路是先找到每一行的最大值和每一列的最小值,然后与当前元素比较是否相等即可:
```c
#include <stdio.h>
#define MAX_ROW 100
#define MAX_COL 100
int main() {
int matrix[MAX_ROW][MAX_COL], max_row[MAX_ROW], min_col[MAX_COL];
int row, col;
printf("请输入二维数组的行数和列数:\n");
scanf("%d %d", &row, &col);
printf("请输入二维数组的元素:\n");
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 找每一行的最大值
for(int i = 0; i < row; i++) {
int max = matrix[i][0];
for(int j = 1; j < col; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
}
}
max_row[i] = max;
}
// 找每一列的最小值
for(int j = 0; j < col; j++) {
int min = matrix[0][j];
for(int i = 1; i < row; i++) {
if(matrix[i][j] < min) {
min = matrix[i][j];
}
}
min_col[j] = min;
}
// 找鞍点
int found = 0; // 是否找到鞍点的标志
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
if(matrix[i][j] == max_row[i] && matrix[i][j] == min_col[j]) {
printf("鞍点坐标为(%d,%d),值为%d\n", i, j, matrix[i][j]);
found = 1;
}
}
}
if(!found) {
printf("NO\n");
}
return 0;
}
```
需要注意的是,此处只找到了一个鞍点的情况,如果有多个鞍点,则需要在找到一个鞍点后继续进行循环寻找其他的鞍点。
阅读全文