找出一个二维数组中的鞍点,鞍点即该位置上的元素在该行最大,在该列上最小。当然也可能没有鞍点。 输入数据格式:"%d" 首先读入两个整数n,m代表二维数组的行和列 其中1≤n,m≤10 然后读入n×m个int类型的数,作为二维数组中的元素。 所有数字之间只有空格或者换行 所有数字均不相同 鞍点最多只可能有一个,你能想明白为什么吗? 输出格式要求: "第%d行,第%d列的%d是鞍点\n" "矩阵中无鞍点!\n"
时间: 2024-03-03 17:49:42 浏览: 53
好的,以下是代码实现:
```c
#include <stdio.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int matrix[n][m]; // 定义二维数组
// 读入二维数组
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &matrix[i][j]);
}
}
// 查找鞍点
int row = -1, col = -1; // 鞍点所在的行和列
for (int i = 0; i < n; i++)
{
int max_in_row = matrix[i][0]; // 当前行的最大值
int col_index = 0; // 当前行最大值的列索引
for (int j = 1; j < m; j++)
{
if (matrix[i][j] > max_in_row)
{
max_in_row = matrix[i][j];
col_index = j;
}
}
// 判断是否为鞍点
int is_saddle_point = 1;
for (int k = 0; k < n; k++)
{
if (matrix[k][col_index] < max_in_row)
{
is_saddle_point = 0;
break;
}
}
if (is_saddle_point)
{
row = i;
col = col_index;
break;
}
}
// 输出结果
if (row != -1 && col != -1)
{
printf("第%d行,第%d列的%d是鞍点\n", row + 1, col + 1, matrix[row][col]);
}
else
{
printf("矩阵中无鞍点!\n");
}
return 0;
}
```
代码思路如下:
1. 读入二维数组;
2. 遍历每一行,找出最大值以及最大值所在的列;
3. 遍历该列,判断该列上的元素是否全都小于等于最大值,若是,则该位置为鞍点;
4. 输出鞍点的位置以及对应的元素值,若没有鞍点则输出提示信息。
注意,这里使用row和col分别记录鞍点所在的行和列,若没有鞍点则将它们的值设为-1。
阅读全文