华为OD机试 - 需要打开多少监控器(Java & JS & Python)

这篇具有很好参考价值的文章主要介绍了华为OD机试 - 需要打开多少监控器(Java & JS & Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开;

给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器;

输入描述

第一行输入m,n表示长宽,满足1 < m,n <= 20;

后面输入m行,每行有n个0或1的整数,整数间使用一个空格隔开,表示该行已停车情况,其中0表示空位,1表示已停;

输出描述

最少需要打开监控器的数量;

用例

输入 3 3
0 0 0
0 1 0
0 0 0
输出 5
说明

题目解析

本题题意比较难以理解,但是画一幅图给大家看下就懂了

华为OD机试 - 需要打开多少监控器(Java & JS & Python)

 停车(1)的位置必须要打开监控器,另外停车位置的上下左右位置(1或0)的监控器也要打开,问最终需要打开多少个监控器?

即,求解上面图示种有颜色的格子数量。

解题思路如下:

遍历矩阵每一个元素,文章来源地址https://www.toymoban.com/news/detail-511335.html

  • 如果元素值为1,对应位置的监控器就要打开。
  • 如果元素值为0,则需要进一步检查其上下左右四个位置,只要这四个位置有一个元素值为1,则当前位置的监控器需要打开

JavaScript算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const [m, n] = (await readline()).split(" ").map(Number);

  const matrix = [];
  for (let i = 0; i < m; i++) {
    matrix.push((await readline()).split(" ").map(Number));
  }

  console.log(getResult(matrix, m, n));
})();

function getResult(matrix, m, n) {
  // 记录需要打开的监控器数量
  let count = 0;

  // 上下左右四个方向的偏移量
  const offsets = [
    [-1, 0],
    [1, 0],
    [0, -1],
    [0, 1],
  ];

  for (let x = 0; x < m; x++) {
    for (let y = 0; y < n; y++) {
      // 如果元素值为1,对应位置的监控器就要打开
      if (matrix[x][y] === 1) {
        count++;
        continue;
      }

      // 如果元素值为0,则需要进一步检查其上下左右4个位置,只要这四个位置有一个元素值为1,则当前位置的监控器需要打开
      for (let [offsetX, offsetY] of offsets) {
        const newX = x + offsetX;
        const newY = y + offsetY;

        if (
          newX >= 0 &&
          newX < m &&
          newY >= 0 &&
          newY < n &&
          matrix[newX][newY] === 1
        ) {
          count++;
          break;
        }
      }
    }
  }

  return count;
}

Java算法源码

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int m = sc.nextInt();
    int n = sc.nextInt();

    int[][] matrix = new int[m][n];
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        matrix[i][j] = sc.nextInt();
      }
    }

    System.out.println(getResult(m, n, matrix));
  }

  public static int getResult(int m, int n, int[][] matrix) {
    // 记录需要打开的监控器数量
    int count = 0;

    // 上下左右四个方向的偏移量
    int[][] offsets = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};

    for (int x = 0; x < m; x++) {
      for (int y = 0; y < n; y++) {
        // 如果元素值为1,对应位置的监控器就要打开
        if (matrix[x][y] == 1) {
          count++;
          continue;
        }

        // 如果元素值为0,则需要进一步检查其上下左右4个位置,只要这四个位置有一个元素值为1,则当前位置的监控器需要打开
        for (int[] offset : offsets) {
          int newX = x + offset[0];
          int newY = y + offset[1];

          if (newX >= 0 && newX < m && newY >= 0 && newY < n && matrix[newX][newY] == 1) {
            count++;
            break;
          }
        }
      }
    }

    return count;
  }
}

Python算法源码

# 输入获取
m, n = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(m)]


# 算法入口
def getResult():
    # 记录需要打开的监控器数量
    count = 0

    # 上下左右四个方向的偏移量
    offsets = ((-1, 0), (1, 0), (0, -1), (0, 1))

    for x in range(m):
        for y in range(n):
            # 如果元素值为1,对应位置的监控器就要打开
            if matrix[x][y] == 1:
                count += 1
                continue

            # 如果元素值为0,则需要进一步检查其上下左右4个位置,只要这四个位置有一个元素值为1,则当前位置的监控器需要打开
            for offsetX, offsetY in offsets:
                newX = x + offsetX
                newY = y + offsetY

                if m > newX >= 0 and n > newY >= 0 and matrix[newX][newY] == 1:
                    count += 1
                    break

    return count


# 算法调用
print(getResult())

C算法源码

#include <stdio.h>

#define MAX_ROWS 20
#define MAX_COLS 20

int main()
{
	// 输入获取
	int m, n;
	scanf("%d %d", &m, &n);
	
	int matrix[MAX_ROWS][MAX_COLS];
	for(int i = 0; i < m; i++) {
		for(int j = 0; j < n; j++) {
			scanf("%d", &matrix[i][j]);
		}
	}
	
	// 记录需要打开的监控器数量
	int count = 0;
	
	// 上下左右四个方向的偏移量
	int offsets[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
	
	for(int x = 0; x < m; x++) {
		for(int y = 0; y < n; y++) {
			// 如果元素值为1,对应位置的监控器就要打开
			if(matrix[x][y] == 1) {
				count++;
				continue;
			}
			
			// 如果元素值为0,则需要进一步检查其上下左右4个位置,只要这四个位置有一个元素值为1,则当前位置的监控器需要打开
			for(int i = 0; i < 4; i++) {
				int offsetX = offsets[i][0];
				int offsetY = offsets[i][1];
				
				int newX = x + offsetX;
				int newY = y + offsetY;
				
				if(newX >=0 && newX < m && newY >= 0 && newY < n && matrix[newX][newY] == 1) {
					count++;
					break;
				}
			}
		}
	}
	
	// 输出打印
	printf("%d\n", count);
	
	return 0;
}

到了这里,关于华为OD机试 - 需要打开多少监控器(Java & JS & Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为OD机试】需要打开多少监视器(贪心算法—Java&Python&C++&JS实现)

    本文收录于专栏:算法之翼 本专栏所有题目均包含优质解题思路,高质量解题代码(JavaPythonC++JS分别实现),详细代码讲解,助你深入学习,深度掌握!

    2024年04月10日
    浏览(39)
  • 华为od统一考试B卷【需要打开多少监视器】JAVA 实现

             所有题目均有五种语言实现。 C实现目录 、 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录 某长方形停车场,每个车位上方都有对应监控器, 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开 : 给出某一

    2024年02月14日
    浏览(28)
  • 【正点原子STM32】PVD低功耗实验 – 电源监控(POR/PDR监控器、PVD监控器、 BOR监控器、AVD监控器、VBAT阈值、温度阈值、PVD相关寄存器和HAL库驱动、PVD的使用步骤)

    一、STM32 电源监控介绍 1.1、上电/掉电复位POR/PDR(F1) 1.2、可编程电压检测器(PVD)(F1) 二、PVD相关寄存器介绍(F1) 三、PVD相关HAL库驱动介绍 四、PVD的使用步骤 五、编程实战 电源监控在STM32芯片中起着关键作用,确保系统在电源电压异常或不稳定时能够进行适当的处理,以

    2024年03月25日
    浏览(32)
  • 系统性能监控-Windows自带性能监控器

    在性能测试过程中,往往需要对系统应用服务器,数据库服务器等服务端资源使用情况进行监控,以获取服务器性能数据,协助判断服务器性能是否满足性能需求;对于不同的服务器类型,监控服务器的方式也不尽相同,本篇我们主要来讲解对于Winsows 系的服务器的性能数据

    2024年02月10日
    浏览(33)
  • 家用监控器怎么选择,怎么连接手机远程监控,保存多久视频

    开篇就是灵魂三问:家用监控器怎么选择,怎么连接手机远程监控,保存多久视频。这三个问题基本涵盖了用户心中所有的疑问。那么速名网在这里就这三个问题一一进行解答。 第一问:家用监控器怎么选择。 我们如何选择最好的无线WiFi摄像机。用户对于监控器第一个印象

    2023年04月16日
    浏览(45)
  • SpringCloud微服务的监控器,Actuator

    在微服务系统里,对微服务程序的运行状况的跟踪和监控是必不可少的;例如GPE,Telegraf+influxDB都提供了微服务体系监控的方案, ZIPKIN, Skywalking都提供了微服务云体系的APM的方案; 这些解决方案功能全面;但是都需要提供额外的资源进行架构; 其实在SpringBoot构建的微服务

    2023年04月18日
    浏览(30)
  • 【SpringBoot系列】- 四大核心之actuator(程序监控器)

    应用系统在开发完成以后,就投入实际生产中运营。在软件运行时,整个软件一个黑盒,如何在整个生命周期中准确的知道应用程序运行的健康状况,服务使用状态?我们需要对应用程序进行监控,从而了解应用的运行状态,并根据情况决定是否需要对其运行状态进行调整。

    2024年02月15日
    浏览(30)
  • ARM LDREX/STREX指令以及独占监控器详解

    Linux驱动开发中有一个特别重要的知识点必须掌握,即并发访问、竞态以及同步。 什么是并发? 多个执行单元(进程、线程、中断) 同时 对一个共享资源进行访问;此处的共享资源可以是外设、内存或者软件层面的全局变量静态变量等;只要并发的多个执行单元存在对共享

    2024年02月09日
    浏览(31)
  • 观测云产品更新 | 日志、场景仪表板、监控器等

    用户访问监测 (RUM ) 公网 Dataway 支持 ip 转换成地理位置信息。 日志 查看器详情页 1、新增 BPF 网络日志采集及日志详情页,支持 Json 格式转化; 2、上述 1 中的日志详情页中新增可读的展示模式,即您可以快速直观了解客户端与服务端之间的网络情况;同时,也支持切换绝

    2024年02月02日
    浏览(34)
  • 深聊性能测试,从入门到放弃之: Windows系统性能监控(二) 资源监控器介绍及使用。

    小屌丝 :鱼哥,我看了你这篇《Windows系统性能监控(一) 性能监视器介绍及使用》,让我学到了好多知识。 小鱼 :嗯,我自己在写这篇文章的时候,也学到了好多。 小屌丝 :是吗,你不都是知道了,咋还又学到了好多; 小鱼 :这个很正常啊,你把你会的知识,重新以文字

    2024年01月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包