用c语言写出一个代码:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。 也可能没有鞍点
时间: 2023-08-31 10:26:47 浏览: 229
C语言程序设计-求一个二维数组中的鞍点
5星 · 资源好评率100%
### 回答1:
以下是用 C 语言编写的代码,用于查找二维数组中的鞍点:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
int arr[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int i, j, k, max, min, saddle_point_exists;
saddle_point_exists = ;
for (i = ; i < ROWS; i++) {
max = arr[i][];
k = ;
for (j = 1; j < COLS; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
k = j;
}
}
min = arr[][k];
for (j = 1; j < ROWS; j++) {
if (arr[j][k] < min) {
min = arr[j][k];
}
}
if (max == min) {
printf("鞍点的位置是: (%d, %d),值为 %d\n", i, k, max);
saddle_point_exists = 1;
}
}
if (!saddle_point_exists) {
printf("该二维数组中不存在鞍点。\n");
}
return ;
}
```
该程序首先定义了一个 3x3 的二维数组,然后使用两个嵌套的 for 循环遍历每一行,找到该行上的最大值和对应的列号 k,然后再遍历每一列,找到该列上的最小值,如果最大值和最小值相等,则说明该位置是一个鞍点,输出其位置和值。如果整个数组中不存在鞍点,则输出相应的提示信息。
### 回答2:
以下是找出二维数组中的鞍点的C语言代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 3
void findSaddlePoint(int arr[ROWS][COLS]) {
int i, j, k;
int saddlePoint = 0;
for (i = 0; i < ROWS; i++) {
int rowMax = arr[i][0];
int colIndex = 0;
// 找出每行的最大值
for (j = 1; j < COLS; j++) {
if (arr[i][j] > rowMax) {
rowMax = arr[i][j];
colIndex = j;
}
}
// 检查最大值是否是该列的最小值
for (k = 0; k < ROWS; k++) {
if (arr[k][colIndex] < rowMax) {
break;
}
}
// 如果找到了鞍点,打印出位置和值
if (k == ROWS) {
printf("鞍点位于第 %d 行第 %d 列,值为 %d\n", i + 1, colIndex + 1, rowMax);
saddlePoint = 1;
}
}
// 如果没有鞍点,打印提示信息
if (!saddlePoint) {
printf("没有鞍点存在\n");
}
}
int main() {
int arr[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
findSaddlePoint(arr);
return 0;
}
```
在这个代码中,我们首先定义了一个名为`findSaddlePoint`的函数,它将一个二维数组作为参数。然后我们遍历每一行,找出每行的最大值,并记下该最大值在该行上的列索引。接下来,我们检查该最大值是否是该列上的最小值。如果是,我们将该位置认定为鞍点,并打印出其位置和值。如果没有找到鞍点,我们打印出相应的提示信息。
在`main`函数中,我们定义了一个3x3的二维数组,并调用`findSaddlePoint`函数来查找并打印出鞍点。
### 回答3:
以下是一个使用C语言编写的解答:
```c
#include <stdio.h>
#define ROWS 3 // 行数
#define COLS 3 // 列数
int main() {
int matrix[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int hasSaddlePoint = 0;
// 寻找鞍点
for (int i = 0; i < ROWS; i++) {
int maxInRow = matrix[i][0]; // 初始化每行最大值为第一个元素
int colIndex = 0; // 列索引
// 找出每一行的最大值
for (int j = 1; j < COLS; j++) {
if (matrix[i][j] > maxInRow) {
maxInRow = matrix[i][j];
colIndex = j;
}
}
int isSaddlePoint = 1; // 假设该元素是鞍点
// 判断是否该元素是其所在列的最小值
for (int k = 0; k < ROWS; k++) {
if (matrix[k][colIndex] < maxInRow) {
isSaddlePoint = 0;
break;
}
}
// 如果是鞍点,则打印结果
if (isSaddlePoint) {
printf("鞍点位置:(%d, %d),值:%d\n", i, colIndex, matrix[i][colIndex]);
hasSaddlePoint = 1;
}
}
// 如果不存在鞍点
if (!hasSaddlePoint) {
printf("不存在鞍点。\n");
}
return 0;
}
```
这个程序使用了一个3x3的二维数组来演示,你可以根据需要修改`ROWS`和`COLS`的值来适应更大的矩阵。程序首先遍历每一行找到最大值,然后再检查该元素是否是其所在列的最小值。如果是鞍点,程序将打印其位置和值;如果不存在鞍点,程序将输出"不存在鞍点"。
阅读全文