鱼C论坛

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

大佬们看看

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

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

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

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

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

假设给定的矩阵如下:

matrix = [[10, 36, 52],

          [33, 24, 88],

          [66, 76, 99]]

那么输出结果应该是 66(同时满足同一行的所有元素中最小,并且在同一列的所有元素中最大)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

matrix = [
    [10, 36, 52],
    [33, 24, 88],
    [66, 76, 99]]

print(luckyNumber(matrix))
66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

          [33, 24, 88],

          [66, 76, 99]]
cmax=matrix[0][0]
flag=0
for x in range(3):
    for y in range(3):
       if matrix[y][x]>cmax:
            cmax=matrix[y][x]
            r=y
    if cmax==min(matrix[r]):
        num=cmax
        flag=1
        
if flag:
    print(num)
else:
    print("no data")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬可以说下思路吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

很简单啊,找出列的最大值,并标注其所在的行数,然后判断该值是不是该行的最小值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

2楼代码也很清晰,只不过没有考虑找不到的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

matrix = [
    [10, 36, 52],
    [33, 24, 88],
    [13, 76, 99]]

print(luckyNumber(matrix))
None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

                        
[66 76 99] [10 33 66]
Lucky num: 66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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