2023华为od机试C卷【分配土地】Python实现 - wpsshop博客
当前位置:   article > 正文

2023华为od机试C卷【分配土地】Python实现

2023华为od机试C卷【分配土地】Python实现

在这里插入图片描述
在这里插入图片描述

思路:

我们可以用哈希结构,此题适合用字典,键为出现的非零数字,值为列表,列表为【minrow,maxrow,minrol,maxrol]
在这里插入图片描述

import sys
def main():
    m,n = map(int,input().split())
    rects = {}
    for i in range(m):
        nums = [int(i) for i in input().split()]
        for j in range(n):
            if nums[j] > 0:
                if nums[j] not in rects:
                    rects[nums[j]]=[sys.maxsize,-sys.maxsize,sys.maxsize,-sys.maxsize]
                rects[nums[j]][0] = min(rects[nums[j]][0],i)
                rects[nums[j]][1] = max(rects[nums[j]][1],i)
                rects[nums[j]][2] = min(rects[nums[j]][2],j)
                rects[nums[j]][3] = max(rects[nums[j]][3],j)
    print(rects)
    #MaxArea = 0
    for key,value in rects.items():
        minrow = value[0]
        maxrow = value[1]
        mincol = value[2]
        maxcol = value[3]
        area = (maxrow-minrow+1)*(maxcol-mincol+1)
        print("{%d}的矩阵面积为:{%d}"%(key,area))
        
if __name__ == "__main__":
    main()
  • 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

这段代码的目的是读取一个矩阵,并计算每个正整数的矩阵区域的面积。下面是对代码的详细解释:

代码结构

  1. 导入模块:

    import sys
    
    • 1

    这行代码导入了 sys 模块,主要用来获取 sys.maxsize,这是 Python 中可以使用的最大整数值。

  2. 主函数:

    def main():
    
    • 1
  3. 输入矩阵的维度:

    m, n = map(int, input().split())
    
    • 1

    mn 分别表示矩阵的行数和列数。通过 input() 接收用户输入,并用空格分隔。

  4. 初始化字典:

    rects = {}
    
    • 1

    rects 是一个字典,用于存储每个正整数在矩阵中的最小和最大行列边界。

  5. 读取矩阵数据:

    for i in range(m):
        nums = [int(i) for i in input().split()]
    
    • 1
    • 2

    在循环中逐行读取矩阵。nums 是当前行的整数列表。

  6. 记录每个正整数的边界:

    for j in range(n):
        if nums[j] > 0:
            if nums[j] not in rects:
                rects[nums[j]] = [sys.maxsize, -sys.maxsize, sys.maxsize, -sys.maxsize]
            rects[nums[j]][0] = min(rects[nums[j]][0], i)
            rects[nums[j]][1] = max(rects[nums[j]][1], i)
            rects[nums[j]][2] = min(rects[nums[j]][2], j)
            rects[nums[j]][3] = max(rects[nums[j]][3], j)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 对于每一个正整数 nums[j]:
      • 如果它不在 rects 字典中,则初始化边界值。
      • 更新矩阵的上下左右边界:
        • rects[nums[j]][0] 表示最小行数。
        • rects[nums[j]][1] 表示最大行数。
        • rects[nums[j]][2] 表示最小列数。
        • rects[nums[j]][3] 表示最大列数。
  7. 打印矩阵的边界字典 (调试用):

    print(rects)
    
    • 1
  8. 计算并打印每个正整数的矩阵面积:

    for key, value in rects.items():
        minrow = value[0]
        maxrow = value[1]
        mincol = value[2]
        maxcol = value[3]
        area = (maxrow - minrow + 1) * (maxcol - mincol + 1)
        print("{%d}的矩阵面积为:{%d}" % (key, area))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 对于每个正整数,计算矩阵区域的面积,使用公式 (maxrow - minrow + 1) * (maxcol - mincol + 1)。这里加1是因为需要计算的是包含的行和列的数量。
  9. 主程序入口:

    if __name__ == "__main__":
        main()
    
    • 1
    • 2

    确保该脚本从这里开始运行。
    下面是运行的例子:
    在这里插入图片描述

总结

这段代码读取一个矩阵,分析每个正整数在矩阵中的位置,并计算出其矩阵面积。使用字典来存储每个正整数的最小和最大行列边界,最终通过计算边界差值得到面积。

理解了,我们可以改写成符合题意要求的代码

import sys
def main():
    m,n = map(int,input().split())
    rects = {}
    for i in range(m):
        nums = [int(i) for i in input().split()]
        for j in range(n):
            if nums[j] > 0:
                if nums[j] not in rects:
                    rects[nums[j]]=[sys.maxsize,-sys.maxsize,sys.maxsize,-sys.maxsize]
                rects[nums[j]][0] = min(rects[nums[j]][0],i)
                rects[nums[j]][1] = max(rects[nums[j]][1],i)
                rects[nums[j]][2] = min(rects[nums[j]][2],j)
                rects[nums[j]][3] = max(rects[nums[j]][3],j)
    MaxArea = 0
    for value in rects.values():
        minrow,maxrow,mincol,maxcol = value
        area = (maxrow-minrow+1)*(maxcol-mincol+1)
        MaxArea = max(area,MaxArea)
    print(MaxArea)
        
        
if __name__ == "__main__":
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/931749
推荐阅读
相关标签
  

闽ICP备14008679号