计算机挑战赛10

智能除草农业植保无人机作为最新的设备,可以加注除草剂进行除草。每次工作可以喷洒边长为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);
    }
}
相关推荐
dundunmm7 分钟前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神7 分钟前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
波音彬要多做8 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
程序员老冯头2 小时前
第十五章 C++ 数组
开发语言·c++·算法
AC使者7 小时前
5820 丰富的周日生活
数据结构·算法
cwj&xyp7 小时前
Python(二)str、list、tuple、dict、set
前端·python·算法
xiaoshiguang311 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡11 小时前
【C语言】判断回文
c语言·学习·算法
别NULL11 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇12 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯