davidmou 发表于 2023-12-7 17:01:18

暗点

由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样,用C语言解决

FishC_GPT 发表于 2023-12-7 17:02:16

首先,我们可以定义一个3*4的二维数组来存储输入的数字矩阵。然后,我们需要遍历每一行,找出每一行中的最大值,并记录下它的列索引。接着,我们再遍历每一列,找出每一列中的最小值,并记录下它的行索引。最后,我们比较每个点的行索引和列索引是否相等,如果相等,则输出该鞍点的值。

下面是一份C语言代码示例:

#include <stdio.h>

int main() {
    int matrix;
    int i, j;
    int max_row, min_col;
    int saddle_point = 0;

    // 输入数字矩阵
    printf("请输入数字矩阵(3行4列):\n");
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 4; j++) {
            scanf("%d", &matrix);
      }
    }

    // 寻找鞍点
    for (i = 0; i < 3; i++) {
      max_row = 0;
      for (j = 1; j < 4; j++) {
            if (matrix > matrix) {
                max_row = j;
            }
      }
      min_col = 0;
      for (j = 1; j < 3; j++) {
            if (matrix < matrix) {
                min_col = j;
            }
      }
      if (max_row == min_col) {
            printf("鞍点的值为:%d\n", matrix);
            saddle_point = 1;
      }
    }

    if (!saddle_point) {
      printf("NO\n");
    }

    return 0;
}

代码中,我们使用两个变量`max_row`和`min_col`分别记录每一行和每一列的最大值和最小值的索引。然后,我们使用两个嵌套的循环来遍历数组,找到每一行的最大值和每一列的最小值。最后,我们比较`max_row`和`min_col`的值,如果相等,则输出该鞍点的值。如果没有找到鞍点,那么`saddle_point`仍为0,我们输出"NO"字样。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

不二如是 发表于 2023-12-7 19:54:54

鞍点是一个矩阵中的特定元素,它是其所在行中的最大数,同时也是其所在列中的最小数。

为了找出矩阵的鞍点,我们需要进行以下步骤:


[*]1. 遍历矩阵的每一行,找出每一行的最大值及其列索引。
[*]2. 使用上一步得到的列索引,检查对应列中的元素是否也是该列的最小值。
[*]3. 如果一个元素同时满足这两个条件,那么它就是鞍点。
[*]4. 如果没有元素满足这些条件,输出“NO”。

下面是使用C语言解决这个问题的代码示例:

#include <stdio.h>
#define ROWS 3
#define COLS 4

int main() {
    int matrix;
    int maxInRow, minInCol, saddlePointFound = 0;
    int i, j, k;

    // 输入矩阵
    printf("请输入一个 %d*%d 的矩阵:\n", ROWS, COLS);
    for (i = 0; i < ROWS; i++) {
      for (j = 0; j < COLS; j++) {
            scanf("%d", &matrix);
      }
    }

    // 寻找鞍点
    for (i = 0; i < ROWS; i++) {
      maxInRow = matrix;
      int maxColIndex = 0;
      // 找到每行的最大值
      for (j = 1; j < COLS; j++) {
            if (matrix > maxInRow) {
                maxInRow = matrix;
                maxColIndex = j;
            }
      }

      // 检查找到的最大值是否也是所在列的最小值
      minInCol = maxInRow;
      for (k = 0; k < ROWS; k++) {
            if (matrix < minInCol) {
                minInCol = matrix;
            }
      }

      // 如果同时是行中最大和列中最小
      if (minInCol == maxInRow) {
            printf("鞍点是: %d 在 (%d, %d)\n", maxInRow, i, maxColIndex);
            saddlePointFound = 1;
            break;
      }
    }

    if (!saddlePointFound) {
      printf("NO\n");
    }

    return 0;
}

这个程序会提示用户输入一个3x4的矩阵,然后它会查找并输出矩阵的鞍点。如果没有鞍点,它将输出“NO”。
页: [1]
查看完整版本: 暗点