用c语言找一个数组中的鞍点,并详解
时间: 2023-03-21 15:03:24 浏览: 156
好的,我理解了你的要求,下面是我的回答:
关于鞍点,我们可以这样来定义:如果一个矩阵中的某个元素在它所在行中是最大值,在所在列中又是最小值,那么这个元素就是这个矩阵的鞍点。
对于一个一维数组来说,我们可以把它看作是一个1xN的矩阵,那么找到这个数组中的鞍点的方法就和找到一个矩阵中的鞍点是类似的。
具体的算法如下:
1. 遍历数组,对于每个元素,找到它所在的行和列。
2. 在它所在的行中找到最大值,记录它的列号。
3. 在它所在的列中找到最小值,记录它的行号。
4. 如果它的行号和列号都等于它在数组中的下标,那么它就是一个鞍点。
以下是C语言实现的代码示例:
```c
#include <stdio.h>
#define ROW 3
#define COL 3
void findSaddlePoint(int arr[][COL], int row, int col) {
int i, j, k, saddlePoint;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
saddlePoint = arr[i][j];
// 找到所在行的最大值
for (k = 0; k < col; k++) {
if (arr[i][k] > saddlePoint) {
saddlePoint = arr[i][k];
}
}
// 找到所在列的最小值
for (k = 0; k < row; k++) {
if (arr[k][j] < saddlePoint) {
saddlePoint = arr[k][j];
}
}
// 判断是否为鞍点
if (saddlePoint == arr[i][j]) {
printf("Saddle point found at (%d, %d): %d\n", i, j, saddlePoint);
}
}
}
}
int main() {
int arr[ROW][COL] = {{3, 7, 8}, {2, 5, 6}, {9, 1, 4}};
findSaddlePoint(arr, ROW, COL);
return 0;
}
```
这个程序的输出结果为:
```
Saddle point found at (0, 1): 7
Saddle point found at (2, 1): 1
```
这意味着这个数组中有两个鞍点,它们分别是(0, 1)和(2, 1),它们的值分别为7和1。
阅读全文