davidmou 发表于 2023-12-7 16:59:25

暗点

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

FishC_GPT 发表于 2023-12-7 17:00:28

首先,我们可以使用一个二维列表来表示输入的数字矩阵。然后,我们需要遍历矩阵的每个元素,找到符合鞍点条件的元素。

具体步骤如下:

1. 首先,我们定义一个函数`find_saddle_point(matrix)`来实现鞍点的查找。该函数接受一个参数`matrix`,表示输入的数字矩阵。

2. 在`find_saddle_point`函数中,我们需要创建两个空列表`saddle_points`和`row_maxs`。
   - `saddle_points`用于存储找到的鞍点。
   - `row_maxs`用于存储每一行的最大值。

3. 使用一个嵌套循环来遍历矩阵的每个元素。外层循环控制行索引,内层循环控制列索引。

4. 在内层循环中,我们需要做以下几件事情:
   - 判断当前元素是否是所在行的最大值,如果是,则将其添加到`row_maxs`中。
   - 记录当前元素的列索引`col_index`。

5. 在外层循环中,遍历`row_maxs`中的元素,并通过比较判断是否为鞍点:
   - 判断当前元素的所在列是否是该列的最小值,如果是,则将该鞍点`(row_index, col_index)`添加到`saddle_points`中。

6. 在函数结束后,判断`saddle_points`是否为空,如果为空,则输出"NO";否则,遍历输出所有的鞍点。

下面是完整的代码实现:

def find_saddle_point(matrix):
    saddle_points = []
    row_maxs = []

    # 遍历矩阵的每个元素
    for row_index, row in enumerate(matrix):
      row_max = max(row)
      row_maxs.append(row_max)

      for col_index, num in enumerate(row):
            # 判断是否为鞍点
            if num == row_max and num == min(matrix for j in range(len(matrix))):
                saddle_points.append((row_index, col_index))

    if not saddle_points:
      print("NO")
    else:
      for point in saddle_points:
            print(f"Saddle point found at ({point}, {point})")


# 从键盘输入数字矩阵
matrix = []
for i in range(3):
    row = []
    for j in range(4):
      num = input(f"Enter value for position ({i}, {j}): ")
      row.append(int(num))
    matrix.append(row)

# 查找鞍点并输出结果
find_saddle_point(matrix)

你可以按照提示依次输入数字矩阵的元素,然后程序将输出找到的鞍点坐标。如果没有鞍点,则输出"NO"。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 暗点