在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的鞍点。要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。用简单的C语言
时间: 2024-09-30 14:01:59 浏览: 30
找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最小 也可能没有鞍点
在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`函数检查其是否满足鞍点条件。如果找到鞍点,就立即停止搜索并打印结果。
阅读全文