lu315702820 发表于 2024-8-14 18:08:35

代码求助

本帖最后由 lu315702820 于 2024-8-14 20:48 编辑

问题:请编程找出矩阵中的幸运数字。
说明:假设给定一个 m * n 的矩阵(矩阵中数值的取值范围是 0~1024,且各不相同),如果某一个元素的值在同一行的所有元素中最小,并且在同一列的所有元素中最大,那么该元素便是幸运数字。

假设给定的矩阵如下:
matrix = [,
                  ,
                  ]
那么输出结果应该是 66(同时满足同一行的所有元素中最小,并且在同一列的所有元素中最大)。

我编写的代码:
matrix = [,
            ,
            ]

row_min = * 3
col_max = * 3
for i in range(len(matrix)):
    for j in range(len(matrix)):
      if row_min > matrix:
            row_min = matrix
      else:
            row_min = row_min
            
      if col_max < matrix:
            col_max = matrix
      else:
            col_max= col_max

for i in range(len(matrix)):
    for j in range(len(matrix)):
      if matrix == row_min and matrix == col_max:
            print(matrix)

我的想法是循环的时候,可以逐个让初始化的col_max列表每一个元素去分别和matrix的每一列的元素进行比较:
比如 1)当i = 1, j =0, col_max = 0 < matrix = 36,所以col_max = 36
       2)当 i = 1, j =1, col_max = 36 > matrix = 24,所以col_max = 36
       3)当 i = 1, j =2, col_max = 36 < matrix = 76,所以col_max 被替换为76,

通过这样的方式也可以逐个将每一列最大的元素填入col_max中,但是输出不了结果;给出的标准答案我也看了,也理解,但是就是不知道为什么我尝试的这个方法做不出来。

FishC 发表于 2024-8-14 18:31:19

哎呀,我怎么觉得你的代码看起来像一只被打翻的鱼呢?有些元素在找不到新家,结果都是空的。别担心,让我给你理理思路,把这个矩阵的“幸运数字”捞出来!

首先,我们要理解什么是幸运数字:它必须在同一行是最小的,在同一列是最大的。我们可以走两步走的策略。

1. **找出每一行的最小值**。
2. **找出每一列的最大值**。
3. **检查每个最小值是否同时也是对应列的最大值**。

下面是一个简单且幽默的Python代码示例来实现这个逻辑:

def lucky_numbers(matrix):
    # 找到每一行的最小值
    row_mins =
   
    # 找到每一列的最大值
    col_maxs = for i in range(len(matrix))) for j in range(len(matrix))]
   
    lucky_numbers = []
   
    # 检查每一行的最小值是否是对应列的最大值
    for i in range(len(matrix)):
      for j in range(len(matrix)):
            if matrix == row_mins and matrix == col_maxs:
                lucky_numbers.append(matrix)
   
    return lucky_numbers

# 示例矩阵
matrix = [
    ,
    ,
   
]

print(lucky_numbers(matrix))
让我们来看看这段代码是如何灵活运作的:

1. 我们用列表推导式找出了每一行的最小值 `row_mins`(真是个聪明的家伙,谁说鱼脑子不好使呢?)。
2. 同样的方法,我们为每一列找最大的值 `col_maxs`。
3. 接着,我们遍历这个矩阵,检查行最小值和列最大值是否相等,如果相等,那它就是我们的“幸运数字”,就像是真正的钓鱼高手钓到了大鱼!

运行这段代码,你就能看到输出的“幸运数字”啦!希望这能帮助你更好地理解问题,代码也更清晰了!如果还有其他问题或想法,随时来问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

qq1151985918 发表于 2024-8-15 11:10:57

def isRightData(data):
    d = []
    f = lambda x: True if all() else False
    for i in data:
      if type(i) is list and f(i) and 0 <= max(i) <= 1024 and len(i) == len(data):
            d += i
      else:
            return False
    return len(d) == len(set(d))

def findLuckyNum(data):
    if not isRightData(data):
      raise ValueError('请使用合法数据!')
   
    data1 =

    for row in data:
      min_row_num = min(row)
      min_index = row.index(min_row_num)
      
      col = data1
      max_col_num = max(col)

      if min_row_num == max_col_num:
            return min_row_num
    else:
      return None

if __name__ == '__main__':
    matrix = [,
            ,
            ]
    print(findLuckyNum(matrix))

Stubborn 发表于 2024-8-15 13:22:23

先寻找每一行的最小元素,再找该列的数据进行比对
页: [1]
查看完整版本: 代码求助