c语言7-5求二维数组a【5】【4】的鞍点

如题所述

第1个回答  2023-04-26
#include <stdio.h>

int main() {
int a[5][4] = {
{5, 7, 8, 6},
{3, 9, 7, 5},
{2, 6, 4, 8},
{4, 8, 9, 3},
{7, 2, 6, 4}
};

int i, j, k, max, min, row, col, flag;

for (i = 0; i < 5; i++) {
max = a[i][0];
col = 0;
for (j = 1; j < 4; j++) {
if (a[i][j] > max) {
max = a[i][j];
col = j;
}
}

min = a[0][col];
row = 0;
for (k = 1; k < 5; k++) {
if (a[k][col] < min) {
min = a[k][col];
row = k;
}
}

if (min == max) {
flag = 1;
printf("鞍点坐标为(%d,%d),值为%d\n", row, col, a[row][col]);
}
}

if (flag == 0) {
printf("该数组不存在鞍点\n");
}

return 0;
}
第2个回答  2023-08-02

在 C 语言中,要找出二维数组 a[5][4] 的鞍点(saddle point),首先需要找到每行的最小元素和每列的最大元素。然后在数组中查找同时是行最小元素和列最大元素的元素,这些元素就是鞍点。

以下是一个示例代码来找到二维数组的鞍点:

```c

#include <stdio.h>

#define ROWS 5

#define COLS 4

int main() {

int a[ROWS][COLS] = {

{1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12},

{13, 14, 15, 16},

{17, 18, 19, 20}

};

// 找每行的最小元素

int minRow[ROWS];

for (int i = 0; i < ROWS; i++) {

minRow[i] = a[i][0];

for (int j = 1; j < COLS; j++) {

if (a[i][j] < minRow[i]) {

minRow[i] = a[i][j];

}

}

}

// 找每列的最大元素

int maxCol[COLS];

for (int j = 0; j < COLS; j++) {

maxCol[j] = a[0][j];

for (int i = 1; i < ROWS; i++) {

if (a[i][j] > maxCol[j]) {

maxCol[j] = a[i][j];

}

}

}

// 查找鞍点

int saddlePoints = 0;

for (int i = 0; i < ROWS; i++) {

for (int j = 0; j < COLS; j++) {

if (a[i][j] == minRow[i] && a[i][j] == maxCol[j]) {

printf("鞍点:%d,位于第 %d 行,第 %d 列\n", a[i][j], i + 1, j + 1);

saddlePoints++;

}

}

}

if (saddlePoints == 0) {

printf("该数组没有鞍点。\n");

}

return 0;

}

```

请注意,上面的示例代码中给定了一个示例的二维数组 a[5][4]。你可以根据需要将其替换为其他任意大小的二维数组,然后运行代码来找到鞍点。