c语言求输入一个二维数组,找出它的鞍点(Saddle Point)。所谓鞍点是指该位置的元素在该行最大,在该列上最小。当然,也可能鞍点不存在。
时间: 2024-02-13 21:59:53 浏览: 26
好的,这是一个经典的算法问题。你可以使用两个for循环遍历二维数组,找到每一行的最大值和每一列的最小值,然后判断是否存在一个位置既是该行的最大值又是该列的最小值,如果存在,那么这个位置就是鞍点。
以下是C语言代码示例:
```c
#include <stdio.h>
#define ROW 3
#define COL 3
int main() {
int matrix[ROW][COL];
int i, j, row_max, col_min, is_saddle_point;
// 输入二维数组
printf("请输入一个 %d 行 %d 列的二维数组:\n", ROW, COL);
for (i = 0; i < ROW; ++i) {
for (j = 0; j < COL; ++j) {
scanf("%d", &matrix[i][j]);
}
}
// 查找鞍点
is_saddle_point = 0;
for (i = 0; i < ROW; ++i) {
row_max = matrix[i][0];
for (j = 1; j < COL; ++j) {
if (matrix[i][j] > row_max) {
row_max = matrix[i][j];
}
}
for (j = 0; j < COL; ++j) {
col_min = matrix[0][j];
for (int k = 1; k < ROW; ++k) {
if (matrix[k][j] < col_min) {
col_min = matrix[k][j];
}
}
if (matrix[i][j] == row_max && matrix[i][j] == col_min) {
printf("鞍点位置为 [%d][%d],元素值为 %d\n", i, j, matrix[i][j]);
is_saddle_point = 1;
}
}
}
if (!is_saddle_point) {
printf("该二维数组不存在鞍点。\n");
}
return 0;
}
```
这段代码中,我们首先定义了一个3行3列的二维数组,然后使用两个for循环输入数组中每个元素的值。接着,我们使用两个for循环遍历二维数组,分别找到每一行的最大值和每一列的最小值,然后判断该位置的元素是否既是该行的最大值又是该列的最小值,如果是,则输出该位置的坐标和元素值。如果不存在鞍点,则输出提示信息。