鱼C论坛

 找回密码
 立即注册
查看: 2457|回复: 8

大佬们看看

[复制链接]
发表于 2021-10-8 14:26:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请编程找出矩阵中的幸运数字。来

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

假设给定的矩阵如下:

matrix = [[10, 36, 52],

          [33, 24, 88],

          [66, 76, 99]]

那么输出结果应该是 66(同时满足同一行的所有元素中最小,并且在同一列的所有元素中最大)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-8 15:05:57 | 显示全部楼层
  1. def luckyNumber(arr: list) -> int:
  2.     for m in arr:
  3.         x = min(m)
  4.         col = m.index(x)
  5.         res = [arr[n][col] for n in range(len(arr))]
  6.         if max(res) == x:
  7.             return x

  8. matrix = [
  9.     [10, 36, 52],
  10.     [33, 24, 88],
  11.     [66, 76, 99]]

  12. print(luckyNumber(matrix))
复制代码
  1. 66
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 15:12:15 | 显示全部楼层
  1. matrix = [[10, 36, 52],

  2.           [33, 24, 88],

  3.           [66, 76, 99]]
  4. cmax=matrix[0][0]
  5. flag=0
  6. for x in range(3):
  7.     for y in range(3):
  8.        if matrix[y][x]>cmax:
  9.             cmax=matrix[y][x]
  10.             r=y
  11.     if cmax==min(matrix[r]):
  12.         num=cmax
  13.         flag=1
  14.         
  15. if flag:
  16.     print(num)
  17. else:
  18.     print("no data")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-8 17:18:47 | 显示全部楼层

感谢大佬可以说下思路吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 17:25:54 From FishC Mobile | 显示全部楼层
Gacy 发表于 2021-10-8 17:18
感谢大佬可以说下思路吗

很简单啊,找出列的最大值,并标注其所在的行数,然后判断该值是不是该行的最小值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 17:29:17 From FishC Mobile | 显示全部楼层
Gacy 发表于 2021-10-8 17:18
感谢大佬可以说下思路吗

2楼代码也很清晰,只不过没有考虑找不到的情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-8 17:43:41 | 显示全部楼层
wp231957 发表于 2021-10-8 17:25
很简单啊,找出列的最大值,并标注其所在的行数,然后判断该值是不是该行的最小值

好的谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 17:50:49 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-8 17:51 编辑

找不到,则输出 None
  1. def luckyNumber(arr: list) -> int:
  2.     for m in arr:
  3.         x = min(m)
  4.         col = m.index(x)
  5.         res = [arr[n][col] for n in range(len(arr))]
  6.         if max(res) == x:
  7.             return x

  8. matrix = [
  9.     [10, 36, 52],
  10.     [33, 24, 88],
  11.     [13, 76, 99]]

  12. print(luckyNumber(matrix))
复制代码
  1. None
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 20:35:35 | 显示全部楼层
要是你正在学numpy或pandas, 有一个 简单的行列调换方法: .T
  1. >>> matrix =  [[10, 36, 52],[33, 24, 88],[66,76, 99]]
  2. >>> import numpy as np
  3. >>> mt = np.array(matrix)
  4. >>> mt
  5. array([[10, 36, 52],
  6.        [33, 24, 88],
  7.        [66, 76, 99]])
  8. >>>
  9. >>> for r in mt:
  10.         for c in mt.T:
  11.                 if min(r) == max(c):
  12.                         print(r, c)
  13.                         print("Lucky num:", min(r))

  14.                        
  15. [66 76 99] [10 33 66]
  16. Lucky num: 66
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-15 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表