华为OD机试 - 需要打开多少监控器(Python/JS/C/C++ 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

在一长方形停车场内,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开。给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器。

二、输入描述

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

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

三、输出描述

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

四、测试用例

测试用例1

1、输入

3 3
0 0 0
0 1 0
0 0 0

2、输出

5

测试用例2

1、输入

3 3
1 0 0
0 1 0
0 0 0

2、输出

6

五、解题思路

对于每一个车位,检查其自身和四个相邻方向的车位是否有车辆停放(即是否有 1)。

如果满足条件,则计数该监控器需要开启。

在检查相邻车位时,需要确保不超出矩阵的边界,以避免数组越界错误。

六、Python算法源码

def count_cameras(m, n, parking_lot):"""统计最少需要开启的监控器数量。:param m: 矩阵的行数:param n: 矩阵的列数:param parking_lot: 停车场的二维列表,0表示空位,1表示已停车辆:return: 最少需要开启的监控器数量"""# 定义四个方向:上、下、左、右directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]camera_count = 0  # 初始化监控器开启数量for i in range(m):for j in range(n):# 检查当前车位或四个相邻方向是否有车辆停放if parking_lot[i][j] == 1:camera_count += 1  # 当前车位有车辆,监控器需要开启else:# 检查四个相邻方向for dx, dy in directions:ni, nj = i + dx, j + dy  # 相邻车位的坐标if 0 <= ni < m and 0 <= nj < n:if parking_lot[ni][nj] == 1:camera_count += 1  # 相邻车位有车辆,监控器需要开启break  # 只需满足一个方向即可,不需继续检查return camera_countdef main():import sys# 读取所有输入lines = sys.stdin.read().strip().split('\n')if len(lines) < 1:print("-1")return# 读取第一行,解析m和nfirst_line = lines[0].strip()try:m, n = map(int, first_line.split())except:print("-1")return# 验证m和n的范围if not (1 < m <= 20) or not (1 < n <= 20):print("-1")return# 检查是否有足够的停车分布行if len(lines) != m + 1:print("-1")returnparking_lot = []for i in range(1, m + 1):try:row = list(map(int, lines[i].strip().split()))if len(row) != n:print("-1")return# 验证每个车位的值for val in row:if val not in [0, 1]:print("-1")returnparking_lot.append(row)except:print("-1")return# 计算最少需要开启的监控器数量result = count_cameras(m, n, parking_lot)print(result)if __name__ == "__main__":main()

七、JavaScript算法源码

function countCameras(m, n, parkingLot) {/*** 统计最少需要开启的监控器数量。* @param {number} m - 矩阵的行数* @param {number} n - 矩阵的列数* @param {number[][]} parkingLot - 停车场的二维数组,0表示空位,1表示已停车辆* @returns {number} 最少需要开启的监控器数量*/// 定义四个方向:上、下、左、右const directions = [[-1, 0], // 上[1, 0],  // 下[0, -1], // 左[0, 1]   // 右];let cameraCount = 0; // 初始化监控器开启数量for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {if (parkingLot[i][j] === 1) {cameraCount += 1; // 当前车位有车辆,监控器需要开启} else {// 检查四个相邻方向for (let [dx, dy] of directions) {const ni = i + dx;const nj = j + dy;// 确保相邻车位在矩阵范围内if (ni >= 0 && ni < m && nj >= 0 && nj < n) {if (parkingLot[ni][nj] === 1) {cameraCount += 1; // 相邻车位有车辆,监控器需要开启break; // 只需满足一个方向即可,跳出循环}}}}}}return cameraCount; // 返回监控器开启数量
}function main() {const fs = require('fs'); // 引入文件系统模块const input = fs.readFileSync('/dev/stdin', 'utf8'); // 读取标准输入const lines = input.trim().split('\n'); // 按行分割输入if (lines.length < 1) {console.log("-1");return;}// 读取第一行,解析m和nconst firstLine = lines[0].trim();const mn = firstLine.split(' ');if (mn.length !== 2) { // 确保有两个数字console.log("-1");return;}const m = parseInt(mn[0]);const n = parseInt(mn[1]);// 验证m和n的范围if (isNaN(m) || isNaN(n) || m <= 1 || m > 20 || n <=1 || n >20) {console.log("-1");return;}// 检查是否有足够的停车分布行if (lines.length !== m +1) {console.log("-1");return;}const parkingLot = [];for (let i =1; i <= m; i++) {const rowStr = lines[i].trim();const row = rowStr.split(' ').map(Number);if (row.length !== n) { // 每行必须有n个分数console.log("-1");return;}// 验证每个车位的值for (let val of row) {if (val !==0 && val !==1) {console.log("-1");return;}}parkingLot.push(row);}// 计算最少需要开启的监控器数量const result = countCameras(m, n, parkingLot);console.log(result);
}// 执行主函数
main();

八、C算法源码

#include <stdio.h>
#include <stdlib.h>// 定义方向数组,表示上、下、左、右
int directions[4][2] = {{-1, 0}, // 上{1, 0},  // 下{0, -1}, // 左{0, 1}   // 右
};int main() {int m, n;// 读取第一行,获取m和nif (scanf("%d %d", &m, &n) != 2) {printf("-1\n");return 0;}// 验证m和n的范围if (m <= 1 || m > 20 || n <=1 || n >20) {printf("-1\n");return 0;}// 动态分配二维数组int parking_lot[m][n];// 读取停车分布for (int i =0; i < m; i++) {for (int j =0; j < n; j++) {if (scanf("%d", &parking_lot[i][j]) !=1) {printf("-1\n");return 0;}// 验证车位值if (parking_lot[i][j] !=0 && parking_lot[i][j] !=1) {printf("-1\n");return 0;}}}int camera_count =0; // 初始化监控器开启数量// 遍历每个车位for (int i =0; i < m; i++) {for (int j =0; j < n; j++) {if (parking_lot[i][j] ==1) {camera_count +=1; // 当前车位有车辆,监控器需要开启}else {// 检查四个相邻方向for (int d =0; d <4; d++) {int ni = i + directions[d][0];int nj = j + directions[d][1];// 确保相邻车位在矩阵范围内if (ni >=0 && ni < m && nj >=0 && nj < n) {if (parking_lot[ni][nj] ==1) {camera_count +=1; // 相邻车位有车辆,监控器需要开启break; // 只需满足一个方向即可,跳出循环}}}}}}// 输出监控器开启数量printf("%d\n", camera_count);return 0;
}

九、C++算法源码

#include <iostream>
#include <vector>
using namespace std;// 定义方向数组,表示上、下、左、右
const int directions[4][2] = {{-1, 0}, // 上{1, 0},  // 下{0, -1}, // 左{0, 1}   // 右
};int main(){ios::sync_with_stdio(false); // 关闭同步,提高IO效率cin.tie(0); // 取消cin的绑定int m, n;// 读取第一行,获取m和nif(!(cin >> m >> n)){cout << "-1\n";return 0;}// 验证m和n的范围if(m <=1 || m >20 || n <=1 || n >20){cout << "-1\n";return 0;}// 初始化停车场二维向量vector<vector<int>> parking_lot(m, vector<int>(n, 0));// 读取停车分布for(int i =0; i <m; i++){for(int j =0; j <n; j++){if(!(cin >> parking_lot[i][j])){cout << "-1\n";return 0;}// 验证车位值if(parking_lot[i][j] !=0 && parking_lot[i][j] !=1){cout << "-1\n";return 0;}}}int camera_count =0; // 初始化监控器开启数量// 遍历每个车位for(int i =0; i <m; i++){for(int j =0; j <n; j++){if(parking_lot[i][j] ==1){camera_count +=1; // 当前车位有车辆,监控器需要开启}else{// 检查四个相邻方向for(int d =0; d <4; d++){int ni = i + directions[d][0];int nj = j + directions[d][1];// 确保相邻车位在矩阵范围内if(ni >=0 && ni <m && nj >=0 && nj <n){if(parking_lot[ni][nj] ==1){camera_count +=1; // 相邻车位有车辆,监控器需要开启break; // 只需满足一个方向即可,跳出循环}}}}}}// 输出监控器开启数量cout << camera_count << "\n";return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146836.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年最新网络协议分析器Wireshark抓包详细教程(更新中)

网络协议分析器 Wireshark 安装 Wireshark 是一个功能强大的网络协议分析器&#xff0c;早期叫作 Ethereal。它主要用于捕获网络数据包&#xff0c;并对这些数据包进行详细的解析和分析&#xff0c;帮助用户深入了解网络通信的细节。它支持多种网络协议&#xff0c;并提供详细…

银河麒麟桌面操作系统如何添加WPS字体

银河麒麟桌面操作系统如何添加WPS字体 1、使用场景2、操作方法步骤一&#xff1a;下载字体文件步骤二&#xff1a;打开终端步骤三&#xff1a;进入字体文件所在目录步骤四&#xff1a;拷贝字体文件到WPS字体目录步骤五&#xff1a;更新字体缓存步骤六&#xff1a;重启WPS Offic…

uni-app-通过vue-cli命令行快速上手

环境安装 全局安装 vue-cli npm install -g vue/cli创建uni-app 使用正式版&#xff08;对应HBuilderX最新正式版&#xff09; vue create -p dcloudio/uni-preset-vue my-project使用alpha版&#xff08;对应HBuilderX最新alpha版&#xff09; vue create -p dcloudio/uni-p…

Linux常用命令;Linux常用软件;Linux权限

一&#xff0c;常用命令 是人向计算机发送指令的语言。 命令的格式&#xff1a; 命令 [选项] [参数] 1、ls 展示当前目录下文件的命令 1、-l 展示详细信息。还有另外一种写法&#xff1a;ll&#xff08;字母 LL 小写&#xff09; 2、-S 按照文件大小倒序展示 3、-t…

1952. 三除数

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给你一个整数 n 。如果 n 恰好有三个正除数 &#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在整数 k &a…

【软件测试】性能测试-概念篇

目录 &#x1f334;什么是性能测试 &#x1f333;常见性能测试指标 &#x1f6a9;并发数 &#x1f6a9;吞吐量 &#x1f6a9;吞吐量分类 &#x1f3c0;按照请求分类:TPS和QTS &#x1f3c0;按照网络数据包划分:KB &#x1f6a9;响应时间 &#x1f6a9;资源利用率 &am…

SpringBoot启动流程之运行时监听器

SpringBoot启动过程&#xff1a; 上一节我们讨论SpringApplication实例化的过程&#xff0c;也就是上图1-5步骤&#xff0c;本节我们讨论6-9的关键步骤&#xff0c;现在主要讲是run方法里面的过程 /*** 启动方法* param args* return*/public ConfigurableApplicationContext …

基于JAVA+SpringBoot+Vue的景区民宿预约系统

基于JAVASpringBootVue的景区民宿预约系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

Mamba所需的causal-conv1d 和mamba-ssm库在哪下载?

背景介绍 参照 Mamba [state-spaces/mamba: Mamba SSM architecture (github.com)] github中提到的环境安装[Installation 一栏] [Option] pip install causal-conv1d>1.4.0: an efficient implementation of a simple causal Conv1d layer used inside the Mamba block.…

浙版传媒思迈特软件大数据分析管理平台建设项目正式启动

近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大数据分析管理平台建设项目。浙版传媒相…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 2 开通推送服务与配置Client ID

在开通推送服务前&#xff0c;请先参考“应用开发准备”完成基本准备工作&#xff0c;再继续进行以下开发活动。 说明 从HarmonyOS NEXT Developer Beta2起&#xff0c;开发者无需配置公钥指纹和Client ID。 操作步骤 登录AppGallery Connect网站&#xff0c;选择“我的项目…

UML图中部署图例题

答案&#xff1a;B 知识点&#xff1a; 组件图 一组构件之间的组织和依赖&#xff0c;专注于系统的静态实现视图 部署图 运行处理结点以及构件的配置&#xff0c;给出体系结构的静态视图 类图 一组对象&#xff0c;接口&#xff0c;协作和它们之间的关系 UML图中涉及到…

ALTIUM DESIGNER PCB设计中关闭和打开捕捉热点(hot spot)功能

ALTIUM DESIGNER PCB设计中关闭和打开捕捉热点&#xff08;snap to hot spot&#xff09;功能 在采用ALTIUM DESIGNER 18 进行PCB元器件布局时&#xff0c;我喜欢将元器件放置在栅格&#xff08;grid&#xff09;上&#xff0c;这样元器件的位置比较规整。但在设置完栅格后&am…

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

&#x1f310;在Java编程中&#xff0c;break和continue是两个重要的控制流语句&#xff0c;它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为&#xff0c;但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句&#xff0c;并使用流程…

VMware启动时报错: “另一个程序已锁定文件的一部分,进程无法访问” 分析记录

项目场景&#xff1a; VMware启动时报错: “另一个程序已锁定文件的一部分,进程无法访问” 问题描述 VMware启动时报错: “另一个程序已锁定文件的一部分,进程无法访问” 原因分析&#xff1a; 虚拟机开启后会对部分文件继续加密&#xff0c;关闭时虚拟机会自动对其解密&…

计算机毕业设计之:基于uni-app的校园活动信息共享系统设计与实现(三端开发,安卓前端+网站前端+网站后端)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Transcipher:从对称加密到同态加密

摘要 本文介绍了Transcipher的概念。在Transcipher的框架下&#xff0c;用户使用高效的对称加密&#xff0c;对自己的数据进行加密&#xff0c;然后将密文和私钥的同态加密密文传输给服务器。服务器进行同态解密&#xff0c;得到用户数据同态加密的密文。Transcipher通过将计算…

分布式锁的几种方案对比?你了解多少种呢?

目录标题 1.关于分布式锁2.分布式锁的实现方案2.1 基于数据库实现2.1.1乐观锁的实现方式2.1.2 悲观锁的实现方式2.1.3 数据库锁的优缺点 2.2 基于Redis实现2.2.1 基于缓存实现分布式锁2.2.2缓存实现分布式锁的优缺点 2.3 基于Zookeeper实现2.3.1 如何实现&#xff1f;2.3.2 zk实…

1.量化第一步,搭建属于自己的金融数据库!

数据是一切量化研究的前提。 做量化没有数据&#xff0c;就相当于做饭时没有食材。 很多时候&#xff0c;我们需要从大量的数据中寻找规律&#xff0c;并从中开发出策略。如果我们每次使用的时候&#xff0c;都从网上去找数据&#xff0c;一方面效率低下&#xff0c;另一方面短…

运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。 二、问题分析 在idea中&#xff0c;运行一个springboot项目&#xff0c;在使用大量的库和依赖的时候&#xff0c;会出现报错“命令行过长”&…