华为OD机试真题 Python 实现【光伏场地建设规划】【2023Q1 100分】-LMLPHP

一、题目描述

祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源。对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。

二、输入描述

第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长,最低要求的发电量

之后每行为调研区域每平方公里的发电量

例如,输入为:

2 5 2 6

1 3 4 5 8
2 3 6 7 1

表示调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6

三、输出描述

输出为这样的区域有多少个

上述输入长宽为2的正方形满足发电量大于等于6的区域有4个。

则输出为:

4

四、补充说明

其中 被调研的区域的长宽均大于等于1,建设电站的边长大于等于1,任何区域的发电量大于等于0。

五、解题思路

  1. 读取输入的调研区域长、宽、电站边长和最低发电量要求;
  2. 创建一个二维数组 arr,用于存储调研区域每平方公里的发电量;
  3. 读取每行调研区域的发电量,并将其存入 arr 数组中;
  4. 使用双重循环遍历调研区域,以左上角坐标作为起点,确定一个正方形的区域;
  5. 在确定的正方形区域内,使用双重循环计算该区域的总发电量;
  6. 如果总发电量大于等于最低发电量要求,则将结果加一;
  7. 遍历结束后,输出结果即为满足要求的区域个数;

六、Python算法源码

def calculate_valid_areas(input_str):
    lines = input_str.split('\n')
    row, col, length, min_power = map(int, lines[0].split())  # 读取调研区域的长、宽、电站边长和最低发电量要求
    arr = []

    for i in range(1, row + 1):
        row_values = list(map(int, lines[i].split()))  # 读取每行调研区域的发电量
        arr.append(row_values)

    result = 0  # 记录满足要求的区域个数

    for i in range(row - length + 1):
        for j in range(col - length + 1):
            power_sum = 0

            for k in range(i, i + length):
                for l in range(j, j + length):
                    power_sum += arr[k][l]  # 计算该区域内的总发电量

            if power_sum >= min_power:  # 判断总发电量是否满足最低发电量要求
                result += 1

    return result

七、效果展示

1、输入

2 5 2 6
1 3 4 5 8
2 3 6 7 1

2、输出

4

3、说明

输入长为2,宽为5的场地,建设的场地为正方形场地,边长为2,要求场地的发电量大于等于6

华为OD机试真题 Python 实现【光伏场地建设规划】【2023Q1 100分】-LMLPHP

🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 Python 实现【光伏场地建设规划】【2023Q1 100分】-LMLPHP

06-28 12:29