相关文章推荐
热心的罐头  ·  python - ...·  1 年前    · 
0 0 0 0
0 0 0 0
我们把 A 中的沙漏定义为指数落在 A 的图形表示中的这种模式的值的子集。abcdefg\begin{matrix}a & b & c\ & d & `e & f & g\end{matrix}aebdfcg
A 中共有16个沙漏,沙漏之和是一个沙漏的值之和。
**任务。**计算A中每个沙漏的沙漏和,然后打印最大的沙漏和。
输入格式。 有6行输入,每行包含6个空格分隔的整数,描述二维数组 A
  • -9≤A[i][j]≤9-9\le A[i][j]\le 9-9≤A[i][j]≤9
  • 0≤i,j≤50 (le i,j (le50≤i,j≤5
    输出格式。 打印 A 中的最大沙漏和。
  • 嗯,经过研究,我同意这个难度。
    这个问题要求的是矩阵 A 中每个沙漏的数值之和,并返回最高的。
    沙漏是矩阵 A 的一个子集。它是一个3x3矩阵,第二行只有一个元素,这个元素位于第二列:abcdefg\begin{matrix}a & b & c\ & d & \e & f & gend{matrix}aebdfcg

    限制条件的解释

    -9 A\[i\]\[j\] 9 意味着每个元素都是一个数字,因为它的范围在-9和9之间,包括
    0 i , j 5 0 i,j 5 意味着 i j 的范围在0到5之间,表明行数和列数都不超过6(因为数组是零索引的,矩阵是数组的一种类型。)

    标记的数组

    让我们给我们的数组 A 的单元格编号如下。
    123456789101112131415161718192021222324252627282930313233343536\begin{matrix}1&2&3&4&5&6\\ 7&8&9&10&11&12\\ 13&14&15&16&17&18\\ 19&20&21&22&23&24\\ 25&26&27&28&29&30\\ 31&32&33&34&35&36end\matrix}171319253128142026323915212733410162228345111723293561218243036
    上述6x6矩阵有36个元素,编号为1-36
    在row[0],列[0],A[0][0],我们有 1
    在行[0],列[1],A[0][1],我们有 2
    在行[0],列[2],A[0][2],我们有 3
    在行[1],列[0],A[1][0],我们有 7
    在行[1],列[1],A[1][1],我们有 8
    在行[2],列[0],A[2][0],我们有 13
    在行[2],列[5],A[2][5],我们有 18
    在行[5],列[0],A[5][0],我们有 31
    在行[5],列[5],A[5][5],我们有 36

    我们的编号数组 A 的第一个沙漏将是。
    row[0]column[0]row[0]column[1]row[0]column[2]row[1]column[0]row[1]column[1]row[1]column[2]row[2]column[0]row[2]column[1]row[2]column[2]\begin{matrix}row[0]column[0] &row[0]column[1] & row[0]column[2]\ row[1]column[0] & row[1]column[2]\ row[2]column[0] & row[2]column[1] &row[2]column[2]\end{matrix}​row[0]column[0]​row[1]column[0]​row[2]column[0]​​​row[0]column[1]​row[1]column[1]​row[2]column[1]​​​row[0]column[2]​row[1]column[2]​row[2]column[2]​​thats is[1238131415]\begin{bmatrix}1&2&3\&8&\13&14&15\end{bmatrix}⎣⎡1132814315⎦⎤
    然后。..
    [2349141516]begin{bmatrix}2&3&4\ &9& \14&15&16end{bmatrix}⎣⎡2143915416⎦⎤, [34510151617]begin{bmatrix}3&4&5\ &10& \15&16&.17\end{bmatrix}​⎣​⎡​​​3​​15​​​4​10​16​​​5​​17​​​⎦​⎤​​, [45611161718]\begin{bmatrix}4&5&6\\ &11& \\16&17&18\end{bmatrix}​⎣​⎡​​​4​​16​​​5​11​17​​​6​​18​​​⎦​⎤​​

    [78914192021]\begin{bmatrix}7&8&9\\ &14& \\19&20&21\end{bmatrix}​⎣​⎡​​​7​​19​​​8​14​20​​​9​​21​​​⎦​⎤​​, [891015202122]\begin{bmatrix}8&9&10\\ &15& \\20&21&22\end{bmatrix}​⎣​⎡​​​8​​20​​​9​15​21​​​10​​22​​​⎦​⎤​​, [9101116212223]\begin{bmatrix}9&10&11\\ &16& \\21&22&23\end{bmatrix}​⎣​⎡​​​9​​21​​​10​16​22​​​11​​23​​​⎦​⎤​​, [10111217222324]\begin{bmatrix}10&11&12\ &17& \22&23&24\end{bmatrix}⎣⎡10221117231224⎦⎤,
    。...等等。

  • 我们要以编程方式获得所有的沙漏
  • 对每个沙漏的元素进行求和
  • 返回最高的总和
  • import math
    def get_max_hour_glass_sum(arr):
      result = -math.inf
      for row in range(4):
            for col in range(4):
                hour_glass_sum = \
                arr[row][col] + arr[row][col+1] + arr[row][col+2] + \
                arr[row+1][col+1] + \
                arr[row+2][col] + arr[row+2][col+1] + arr[row+2][col+2]
                result = max((result, hour_glass_sum))
        print(result)
    

    在上面的代码中,我们导入了math 模块,所以我们可以在我们的函数中使用它。

  • 我们定义了我们的函数get_max_hour_glass_sum ,它以arr 为参数。
  • 我们将负无穷(-math.inf)分配给result 变量。由于问题要求最大和,我们从负无穷开始,并将result 的值改为高于当前result 值的沙漏和。每次我们生成沙漏的总和时,我们都将其与result 的值进行核对;如果result 的值更高,则保持不变,否则,result 的值将变为沙漏总和的值。
  • 我们运行一个嵌套的for-loop,从第一行开始直到第四行,然后是第一列直到第四列。如果我们超过了第四行或第四列,我们就不能实现沙漏了。例如,使用我们上面的数字矩阵,到第五列就可以得到。[56121718]\begin{bmatrix}5&6&\\ &12& \\17&18&\end{bmatrix}​⎣​⎡​​​5​​17​​​6​12​18​​​​​​​​⎦​⎤​​
  • 我们将当前元素和它的邻居组成的沙漏相加,并将总和分配给hour_glass_sum
  • 我们检查hour_glass_sumresult 之间的最高值,并将其分配给结果。
  • 最后,我们打印出结果。
  • 如果有更有效的方法来实现这个结果,请告诉我,我很想学习。
    祝您愉快!

    感谢知识中心
    照片:Nathan DumlaoonUnsplash

    PythonHackerrankAlgorithm

    喜欢这个帖子吗?如果有帮助,请给Olaide Alaka一个赞。

    Python/Django全栈开发者

    我是一名全栈开发人员,精通Python/Django与JavaScript、HTML、CSS、jQuery/Ajax。我已经开发了几个网络和桌面应用程序,包括学校管理,测验,学校学习,电子商务和库存应用程序。

    发现并阅读Olaide Alaka的更多文章

    喜欢这个帖子吗?

    请为Olaide留下喜欢和评论

    成为第一个分享您意见的人

    支持GitHub口味的markdown

    显示更多回复

    分类:
    前端
    标签: