用c语言编写找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
时间: 2023-09-09 22:08:06 浏览: 113
好的,我来回答你的问题。
以下是用 C 语言编写的找出一个二维数组的“鞍点”的代码,其中使用了两个函数:
```c
#include <stdio.h>
#define ROW 3
#define COL 4
void findSaddlePoint(int arr[][COL], int row, int col);
int findMinInCol(int arr[][COL], int row, int col, int c);
int findMaxInRow(int arr[][COL], int row, int col, int r);
int main() {
int arr[ROW][COL] = {{4, 5, 6, 7}, {3, 2, 1, 8}, {9, 0, 2, 6}};
findSaddlePoint(arr, ROW, COL);
return 0;
}
void findSaddlePoint(int arr[][COL], int row, int col) {
int r, c, min, max, found;
found = 0;
for (r = 0; r < row; r++) {
for (c = 0; c < col; c++) {
min = findMinInCol(arr, row, col, c);
max = findMaxInRow(arr, row, col, r);
if (arr[r][c] == min && arr[r][c] == max) {
printf("Saddle Point Found: %d at (%d, %d)\n", arr[r][c], r, c);
found = 1;
}
}
}
if (!found) {
printf("No Saddle Point Found.\n");
}
}
int findMinInCol(int arr[][COL], int row, int col, int c) {
int r, min;
min = arr[0][c];
for (r = 1; r < row; r++) {
if (arr[r][c] < min) {
min = arr[r][c];
}
}
return min;
}
int findMaxInRow(int arr[][COL], int row, int col, int r) {
int c, max;
max = arr[r][0];
for (c = 1; c < col; c++) {
if (arr[r][c] > max) {
max = arr[r][c];
}
}
return max;
}
```
在代码中,我们首先定义了一个 3 行 4 列的二维数组 `arr`,然后调用了 `findSaddlePoint` 函数来查找鞍点。该函数接受一个二维数组、行数和列数作为参数,然后使用两个 for 循环来遍历所有的元素,对于每个元素,分别使用 `findMinInCol` 和 `findMaxInRow` 函数来查找该元素所在的列和行的最小值和最大值,如果该元素既是所在行的最大值又是所在列的最小值,就说明找到了一个鞍点,于是输出该点的坐标和值。如果遍历完整个数组都没有找到鞍点,就输出一个提示信息。
`findMinInCol` 和 `findMaxInRow` 函数分别用于查找指定列和行的最小值和最大值,它们接受一个二维数组、行数、列数以及要查找的行或列的索引作为参数,然后使用一个 for 循环遍历该行或列的所有元素,找到最小值或最大值后返回即可。
希望这个答案能够帮到你,如果你有任何问题或需要进一步的帮助,请随时向我提问。
阅读全文