华为OD E卷(100分)03-光伏场地建设规划

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。
        某电力公司希望在这里建设多个光伏电站,生产清洁能源。对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为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. 以矩阵【0,0】为坐标,按准备建设的电站(正方形)边长为范围,进行区域内可发电量进行求和。求和的值满足条件则加一。

题解

Java实现

package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月9日
* 
*
*/
public class T03 {
	
	private static void find(int[][] area, int l, int k, int baseL, int minQ) {
		int res = 0;
		for (int i = 0; i <= l-baseL; i++) {
			for (int j = 0; j <= k-baseL; j++) {
				int sum = 0;
				// 计算每个电站区域的发电量
				for (int n = 0; n < baseL; n++) {
					for (int m = 0; m < baseL; m++) {
						sum += area[i+n][j+m];
					}
				}
				//System.out.println(sum);
				if(sum >= minQ) {
					res += 1;
				}
			}
		}
		System.out.println(res);
	}

	public static void main(String[] args) {
		int l = 0; //长
		int k = 0; //宽
		int baseL = 1; //电站边长
		int minQ = 0; // 要求最低发电量
		Scanner sc = new Scanner(System.in);
		l = sc.nextInt();
		k = sc.nextInt();
		baseL = sc.nextInt();
		if (baseL > l || baseL > k) {
			System.out.println("0");
			return;
		}
		minQ = sc.nextInt();
		int[][] area = new int[l][k];
		for (int i = 0; i < l; i++) {
			for (int j = 0; j < k; j++) {
				area[i][j] = sc.nextInt();
			}
		}
		find(area, l, k, baseL, minQ);

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arnold66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值