找出一个二位数组的“鞍点”,即该位置上的元素在该行上最大,在该列 上最小,也可能没有鞍点。应如何用C语言
时间: 2023-11-06 19:03:18 浏览: 186
假设二维数组为`arr[m][n]`,可以按照以下步骤来找出“鞍点”:
1. 遍历二维数组,找出每行的最大值并记录下来,保存在`row_max[m]`数组中。
2. 遍历二维数组,找出每列的最小值并记录下来,保存在`col_min[n]`数组中。
3. 再次遍历二维数组,依次判断每个元素是否满足在该行上最大,在该列上最小,并记录下来其坐标`(i,j)`。
4. 如果找到了这样的元素,则输出坐标`(i,j)`即可;如果没有找到,则说明该二维数组没有鞍点。
下面是用C语言实现的代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
int arr[MAX_SIZE][MAX_SIZE];
int row_max[MAX_SIZE], col_min[MAX_SIZE];
int m, n, i, j, flag;
printf("请输入二维数组的行数和列数:");
scanf("%d %d", &m, &n);
printf("请输入二维数组的元素:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &arr[i][j]);
}
}
// 找出每行的最大值
for (i = 0; i < m; i++) {
row_max[i] = arr[i][0];
for (j = 1; j < n; j++) {
if (arr[i][j] > row_max[i]) {
row_max[i] = arr[i][j];
}
}
}
// 找出每列的最小值
for (j = 0; j < n; j++) {
col_min[j] = arr[0][j];
for (i = 1; i < m; i++) {
if (arr[i][j] < col_min[j]) {
col_min[j] = arr[i][j];
}
}
}
// 找出鞍点
flag = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (arr[i][j] == row_max[i] && arr[i][j] == col_min[j]) {
printf("鞍点坐标为 (%d,%d)\n", i, j);
flag = 1;
}
}
}
if (!flag) {
printf("该二维数组没有鞍点!\n");
}
return 0;
}
```
阅读全文