找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小c语言(数组包含负数)
时间: 2024-11-28 17:19:25 浏览: 14
数组经典例题求鞍点.txt
5星 · 资源好评率100%
找出二维数组中的鞍点,通常意味着我们需要找到一个位置,这个位置的数值在所在行中是最高的,但在所在列中却是最低的。在C语言中,可以采用两层嵌套循环来遍历整个数组,并维护两个变量分别记录当前行的最大值和当前列的最小值。同时,还有一个变量用于保存当前找到的鞍点值。
以下是一个简单的C语言函数示例,假设`arr`是二维数组,`rows`和`cols`分别是它的行数和列数:
```c
#include <stdio.h>
#define ROWS 5
#define COLS 4
int findMinCol[ROWS]; // 记录每一行的最小值
int maxRow = -INFINITY; // 最大值初始设为负无穷
int minCol = ROWS; // 最小值初始设为行数
int resultRow, resultCol; // 鞍点的位置
void initializeMinMax() {
for (int i = 0; i < ROWS; i++) {
findMinCol[i] = arr[i][0];
}
}
// 遍历数组寻找鞍点
void searchForPivot(int arr[][COLS], int rows, int cols) {
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
if (arr[row][col] > maxRow && arr[row][col] <= findMinCol[col]) { // 如果当前元素比最大行小且大于等于最小列
maxRow = arr[row][col]; // 更新最大行
resultRow = row; // 保存行索引
minCol = col; // 保存列索引
} else if (arr[row][col] < findMinCol[col] && arr[row][col] != -INFINITY) { // 检查是否更新了最小列(排除负数)
findMinCol[col] = arr[row][col]; // 更新最小列
}
}
}
}
int main() {
int arr[ROWS][COLS] = {{1, 2, 9, 6},
{-4, 3, 8, 0},
{7, 5, -2, -3},
{10, 4, -1, -5},
{0, -6, -4, -7}};
initializeMinMax();
searchForPivot(arr, ROWS, COLS);
printf("鞍点位置 (row, col): (%d, %d)\n", resultRow, resultCol);
return 0;
}
```
阅读全文