C语言求出n×m二维整数数组中的所有逆鞍点。这里的逆鞍点是指在其所在的行上最大,在其所在的列上最小的元素。若存在逆鞍点,则输出所有逆鞍点的值及其对应的行、列下标。若不存在逆鞍点,则输出“Not”。要求至少使用一个自定义函数。的代码
时间: 2023-12-17 19:03:26 浏览: 98
好的,这是一个经典的算法问题,下面是使用 C 语言实现的代码示例:
```c
#include <stdio.h>
#define N 100
void find_inverse_saddle(int matrix[][N], int n, int m) {
int i, j, k, row_max, col_min, found = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
int val = matrix[i][j];
row_max = matrix[i][0];
for (k = 1; k < m; k++) {
if (matrix[i][k] > row_max) {
row_max = matrix[i][k];
}
}
col_min = matrix[0][j];
for (k = 1; k < n; k++) {
if (matrix[k][j] < col_min) {
col_min = matrix[k][j];
}
}
if (val == row_max && val == col_min) {
printf("%d (%d, %d)\n", val, i, j);
found = 1;
}
}
}
if (!found) {
printf("Not\n");
}
}
int main() {
int matrix[N][N], n, m, i, j;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &matrix[i][j]);
}
}
find_inverse_saddle(matrix, n, m);
return 0;
}
```
这个 C 语言的实现与 Python 实现的思路类似,也是遍历二维数组,对于每个元素,分别找到它所在行和列中的最大值和最小值,判断是否为逆鞍点,最后输出结果。
需要注意的是,在 C 语言中,二维数组作为函数参数时,只能省略最后一个维度的长度,因此在这里我们定义了一个常量 N,表示二维数组的最大长度。同时,为了避免反复调用 max 和 min 函数,我们使用了两个 for 循环来寻找行和列中的最大值和最小值。
希望这个解答能够帮助到你,如果你有任何疑问或其他问题,可以随时问我。
阅读全文