C语言写一个函数,找出一个二维数组中的鞍点,如果有鞍点,返回鞍点值,没有返回0。 给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。
时间: 2023-12-03 22:47:34 浏览: 98
可以使用两个循环分别遍历每一行和每一列,找到每一行的最大值和每一列的最小值,然后判断是否存在一个元素同时满足在该行为最大值,在该列为最小值,如果存在则返回该元素的值,否则返回0。
下面是实现代码:
```c
int saddle_point(int A[][n]) {
int i, j, max, min, k;
for (i = 0; i < n; i++) {
max = A[i][0];
k = 0;
for (j = 1; j < n; j++) {
if (A[i][j] > max) {
max = A[i][j];
k = j;
}
}
min = A[0][k];
for (j = 1; j < n; j++) {
if (A[j][k] < min) {
min = A[j][k];
}
}
if (max == min) {
return max;
}
}
return 0;
}
```
其中,参数`A`为二维数组,`n`为矩阵的维数,函数返回值为鞍点的值或者0。
相关问题
在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的鞍点。要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。用简单的C语言
在C语言中,找到二维数组中的鞍点通常涉及遍历整个数组,并比较每个元素与其所在行的最大值以及所在列的最小值。下面是一个简化的示例程序,用于查找并打印鞍点:
```c
#include <stdio.h>
// 定义一个函数来获取给定二维数组中某个元素所在的行最大值和列最小值
int get_row_max_col_min(int arr[][n], int row, int col) {
int max_val = arr[row][col];
int row_max = max_val;
int min_val = max_val;
// 检查行最大值
for (int i = 0; i < n; i++) {
if (arr[row][i] > max_val) {
row_max = arr[row][i];
}
}
// 检查列最小值
for (int j = 0; j < m; j++) {
if (arr[j][col] < min_val && arr[j][col] != 0) { // 注意这里假设非零元素作为最小值处理
min_val = arr[j][col];
}
}
return min_val == max_val ? -1 : max_val; // 如果两者相等,说明不是鞍点,返回-1
}
int main() {
int n, m; // 行数和列数
printf("请输入二维数组的行数和列数:");
scanf("%d %d", &n, &m);
int arr[n][m]; // 初始化二维数组
printf("请输入二维数组的元素:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &arr[i][j]);
}
}
int saddle_point = -1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int val = get_row_max_col_min(arr, i, j);
if (val != -1) {
saddle_point = val;
break; // 找到鞍点后就跳出循环
}
}
if (saddle_point != -1) {
break; // 同理,找到鞍点后就跳出内层循环
}
}
if (saddle_point != -1) {
printf("鞍点坐标为 (%d, %d),值为 %d\n", i, j, saddle_point);
} else {
printf("二维数组中不存在鞍点。\n");
}
return 0;
}
```
这个程序首先获取用户输入的二维数组的尺寸和元素,然后通过嵌套循环遍历每个元素,并使用`get_row_max_col_min`函数检查其是否满足鞍点条件。如果找到鞍点,就立即停止搜索并打印结果。
二维数组有鞍点怎么通过c语言编程实现
二维数组中的“鞍点”是指那些比其周围元素都小的最大值或比其周围元素都大的最小值。在C语言中,寻找二维数组的鞍点通常涉及两个步骤:遍历数组并比较相邻元素。
以下是一个简单的C语言函数,用于在一个给定的二维整数数组中查找鞍点:
```c
#include <stdio.h>
#define ROWS 5
#define COLS 5
int is_min_max(int arr[ROWS][COLS], int row, int col, char type) {
if (type == 'm') { // 如果是找最小值
for (int i = row - 1; i <= row + 1 && i < ROWS; ++i) {
for (int j = col - 1; j <= col + 1 && j < COLS; ++j) {
if (arr[i][j] > arr[row][col]) return 0;
}
}
return 1;
} else if (type == 'M') { // 如果是找最大值
for (int i = row - 1; i <= row + 1 && i < ROWS; ++i) {
for (int j = col - 1; j <= col + 1 && j < COLS; ++j) {
if (arr[i][j] < arr[row][col]) return 0;
}
}
return 1;
}
return 0; // 如果不是'm'或'M'
}
void find_hill_valley(int arr[ROWS][COLS]) {
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
if (is_min_max(arr, i, j, 'm')) printf("(%d,%d) is a minimum point\n", i, j);
else if (is_min_max(arr, i, j, 'M')) printf("(%d,%d) is a maximum point\n", i, j);
}
}
}
int main() {
int array[ROWS][COLS] = {
{9, 8, 7, 6, 5},
{4, 3, 2, 1, 0},
{1, 0, 1, 0, 1},
{0, 2, 3, 4, 5},
{6, 7, 8, 9, 10}
};
find_hill_valley(array);
return 0;
}
阅读全文
相关推荐













