前言
工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近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。
解题思路
- 构建调研区域每平方公里的土地发电评估数据矩阵。
- 以矩阵【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);
}
}