一、题目描述
祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源。对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为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。
五、解题思路
- 读取输入的调研区域长、宽、电站边长和最低发电量要求;
- 创建一个二维数组 arr,用于存储调研区域每平方公里的发电量;
- 读取每行调研区域的发电量,并将其存入 arr 数组中;
- 使用双重循环遍历调研区域,以左上角坐标作为起点,确定一个正方形的区域;
- 在确定的正方形区域内,使用双重循环计算该区域的总发电量;
- 如果总发电量大于等于最低发电量要求,则将结果加一;
- 遍历结束后,输出结果即为满足要求的区域个数;
六、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] split = line.split("\\s+");
// 表示调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6
// 长
int row = Integer.parseInt(split[0]);
// 宽
int col = Integer.parseInt(split[1]);
// 建设的电站的边长
int len = Integer.parseInt(split[2]);
// 建设电站最低发电量
int wh = Integer.parseInt(split[3]);
int result = 0;
int[][] arr = new int[row][col];
for (int i = 0; i < row; i++) {
String nextLine = sc.nextLine();
String[] arr2 = nextLine.split("\\s+");
for (int j = 0; j < col; j++) {
int aa = Integer.parseInt(arr2[j]);
arr[i][j] = aa;
}
}
for (int i = 0; i + len <= row; i++) {
for (int j = 0; j + len <= col; j++) {
int sum = 0;
for (int k = i; k < i + len; k++) {
for (int l = j; l < j + len; l++) {
sum = sum + arr[k][l];
}
}
if (sum >= wh) {
result = result + 1;
}
}
}
System.out.println(result);
}
七、效果展示
1、输入
2 5 2 6
1 3 4 5 8
2 3 6 7 1
2、输出
4
3、说明
输入长为2,宽为5的场地,建设的场地为正方形场地,边长为2,要求场地的发电量大于等于6
🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。