智能除草农业植保无人机作为最新的设备,可以加注除草剂进行除草。每次工作可以喷洒边长为K的正方形区域。现有一块边长为N的正方形农田,将其分成N*N个方格单元,已知每个单元里的杂草数量。求该植保无人机一次工作最多除草量和最少除草量的差值。输入说明:第一行是2个正整数,分别为N和K(1≤K≤N≤1000)。之后N行N列正整数,表示每个单元中的杂草数量(不超过50)。输出说明:该植保无人机一次工作最多除草量和最少除草量的差值。
输入样例:
5 2
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 2 3 1 1
输出样例:
7 4
代码:
C++:
cpp
#include<iostream>
using namespace std;
int main() {
int n, k; cin >> n >> k;
int arr[500][500];
for (auto i = 0; i < n; i++) {
for (auto j = 0; j < n; j++) {
int num;
cin >> num;
arr[i][j] = num;
}
}
int max = 0;
int min = 0x3f3f3f3f;
for (auto i = 0; i < n - (k - 1); i++) {
for (auto j = 0; j < n - (k - 1); j++) {
int sum = 0;
for (int i1 = 0; i1 < k; i1++) {
for (int j1 = 0; j1 < k; j1++) {
sum += arr[i + i1][j + j1];
}
}
if (max <= sum) {
max = sum;
}
if (min >= sum) {
min = sum;
}
}
}
cout << max << ' ' << min << endl;
return 0;
}
Python:
python
n, k = map(int, input().split())
arr = [[0 for j in range(500)] for i in range(500)]
maxNum = 0
minNum = 0x3f3f3f3f
for i in range(n):
count = 0
num = map(int, input().split())
for j in num:
arr[i][count] = j
count += 1
for i in range(0, n - (k - 1), 1):
for j in range(0, n - (k - 1), 1):
s = 0
for x in range(k):
for y in range(k):
s += arr[i + x][j + y]
if maxNum <= s:
maxNum = s
if minNum >= s:
minNum = s
print(str(maxNum) + " " + str(minNum))
Java:
java
package com.my.gududu;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n, k;
n = input.nextInt();
k = input.nextInt();
int arr[][] = new int[500][500];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int num;
num = input.nextInt();
arr[i][j] = num;
}
}
int max = 0;
int min = 0x3f3f3f3f;
for (int i = 0; i < n - (k - 1); i++) {
for (int j = 0; j < n - (k - 1); j++) {
int sum = 0;
for (int i1 = 0; i1 < k; i1++) {
for (int j1 = 0; j1 < k; j1++) {
sum += arr[i + i1][j + j1];
}
}
if (max <= sum) {
max = sum;
}
if (min >= sum) {
min = sum;
}
}
}
System.out.println(max + " " + min);
}
}