反射计数 - 华为OD统一考试

OD统一考试

分值: 200分

题解: Java / Python / C++

alt

题目描述

给定一个包含 0 和 1 的二维矩阵, 给定一个初始位置和速度。

一个物体从给定的初始位置触发, 在给定的速度下进行移动, 遇到矩阵的边缘则发生镜面反射无论物体经过 0 还是 1,都不影响其速度。

请计算并给出经过t 时间单位后,物体经过 1 点的次数。

矩阵以左上角位置为[0,0](列(x),行(y)),例如坐标为[ 2 , 1 ](第二列,第一行)。

+--------------------------- 递增(x)
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
| 0 0 1 0 0 0 0 1 0 0 0 0
|
递增(y)

注意:

如果初始位置的点是 1, 也计算在内

时间的最小单位为1, 不考虑小于 1 个时间单位内经过的点

输入描述

第一行为初始信息
<w> <h> <x> <y> <sx> <sy> <t>

第二行开始一共h行,为二维矩阵信息

其中w,h 为矩阵的宽和高x,y 为起始位置

sx,sy为初始速度t为经过的时间

所有的输入都是有效的,数据范围 如下:

$ 0< w, h <100 $

0 ≤ x < w 0\le x\lt w 0x<w

0 ≤ y < h 0 ≤ y \lt h 0y<h

− 1 ≤ s x , s y ≤ 1 -1\le sx,sy\le 1 1sx,sy1

0 ≤ t ≤ 100 0\le t\le 100 0t100

输出描述

经过1的个数

注意:初始位置也要计算在内

示例1

输入:
12 7 2 1 1 -1 13
001000010000
001000010000
001000010000
000100001000
001000010000
001000010000
001000010000输出:
3说明:
初始位置为(2,1),速度为(1,-1),那么13个时间单位后,经过点1的个数为3

题解

解题思路:

  1. 读取输入的初始信息和二维矩阵。
  2. 使用循环模拟物体的运动,根据速度更新物体的位置,如果遇到矩阵边缘则进行反射。
  3. 在每次移动过程中,如果物体当前位置为1,则将计数器增加。
  4. 重复上述过程直到达到指定的时间。
  5. 输出计数器的值,即物体经过1的次数。

代码特点:

  • 使用二维数组表示矩阵。
  • 通过循环模拟物体的运动。
  • 使用条件判断处理边界反射。

这是一个简单的模拟题,主要考察对物体运动轨迹的模拟和条件判断的处理。

Java

import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int w = scanner.nextInt(), h = scanner.nextInt();int x = scanner.nextInt(), y = scanner.nextInt();int sx = scanner.nextInt(), sy = scanner.nextInt();int t = scanner.nextInt();char[][] g = new char[h][w];for (int i = 0; i < h; i++) {g[i] = scanner.next().toCharArray();}int ans = 0;do {if (g[y][x] == '1') ans += 1;int nx = x + sx;if (nx < 0 || nx >= w) sx = -sx; // 边界发生反射int ny = y + sy;if (ny < 0 || ny >= h) sy = -sy; // 边界发生反射x += sx;y += sy;} while (t-- > 0);System.out.println(ans);}
}

Python

w, h, x, y, sx, sy, t = map(int, input().split())
g = [list(input()) for _ in range(h)]ans = 0
for _ in range(t+1):if g[y][x] == '1':ans += 1nx = x + sxif nx < 0 or nx >= w:sx = -sx  # 边界发生反射ny = y + syif ny < 0 or ny >= h:sy = -sy  # 边界发生反射x += sxy += syprint(ans)

C++

#include <iostream>
#include <vector>using namespace std;int main() {int w, h, x, y, sx, sy, t;cin >> w >> h >> x >> y >> sx >> sy >> t;vector<vector<char>> g(h, vector<char>(w));for (int i = 0; i < h; i++) {string row;cin >> row;for (int j = 0; j < w; j++) {g[i][j] = row[j];}}int ans = 0;do {if (g[y][x] == '1') ans += 1;int nx = x + sx;if (nx < 0 || nx >= w) sx = -sx; // 边界发生反射int ny = y + sy;if (ny < 0 || ny >= h) sy = -sy; // 边界发生反射x += sx;y += sy;} while (t-- > 0);cout << ans << endl;return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity | AudioSource 无声音

Unity | AudioSource 无声音 你是否也会遇到相同的问题&#xff1f;AudioSource没声音&#xff1f; 解决&#xff1a; 注意查看一下几处声音设置&#xff1a;

redis数据安全(五)事务

一、概念&#xff1a; 1、介绍&#xff1a;Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。在事务执行过程&#xff0c;会按照顺序串行化执行队列中的命令&#xff0c;其他客户端提交的命令请求不会插入到事务执行命…

边缘计算的挑战和机遇(结合RDH-EI)

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 &#x1f332;序言&#x1f334;前端代码的引入&#x1f38b;约定前后端交互接口&#x1f343;后端服务器代码实现&#x1f6a9;UserController.java&#x1f6a9;BookController.java ⭕总结 &#x1f332;序言 该图书管理系统&#xff0c;博主将一步一步进行实现。…

nginx入门学习

nginx简介 nginx 是什么?用来干嘛的 通俗解释&#xff1a;客户端向服务器请求时&#xff0c;提供让多个服务器一起处理请求的东西 是一个反向代理服务器&#xff0c;能够提供负载均衡&#xff0c;和进行反向代理的功能 正向代理&反向代理 客户端向代理服务器请求&#…

Leetcode24-找到两个数组中的公共元素(2956)

1、题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;它们分别含有 n 和 m 个元素。 请你计算以下两个数值&#xff1a; 统计 0 < i < n 中的下标 i &#xff0c;满足 nums1[i] 在 nums2 中 至少 出现了一次。 统计 0 < i < m 中的下标 i &…

Docker安装Nginx并部署MySQL容器构建

一.MySQL容器的构建 1.创建MySQL根目录及配置文件夹&data文件夹 mkdir -p mysql/{conf,data} 2.上传配置文件 将配置文件上传到conf文件夹&#xff08;数据库配置文件已放到置顶资源中&#xff09; 3.命令构建MySQL容器 /soft/mysql/conf/my.cnf:/etc/my.cnf目录为我们…

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

Dubbo服务暴露机制解密:深入探讨服务提供者的奥秘【九】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Dubbo服务暴露机制解密&#xff1a;深入探讨服务提供者的奥秘【九】 前言服务暴露机制简介服务注册与发现协议选择与拓展动态代理实现结语&#xff1a; 前言 在分布式系统中&#xff0c;服务的暴露是…

【React】Redux的使用详解

文章目录 Redux的三大原则Redux官方图react-redux使用 1、创建store管理全局状态​ 2、在项目index.js根节点引用 3、 在需要使用redux的页面或者组件中&#xff0c;通过connect高阶组件映射到该组件的props中 redux中异步操作如何使用redux-thunkcombineReducers函数 Re…

IPv6自动隧道---6to4隧道

IPv6 over IPv4自动隧道特点 由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。 6to4隧道 集手动隧道和自动隧道的优点于一身,提出6to4的目的是为IPv4网络…

目标检测开源数据集——道路坑洼

一、危害 对车辆的影响&#xff1a;道路坑洼会导致车辆行驶不稳&#xff0c;增加车辆的颠簸&#xff0c;不仅影响乘坐舒适度&#xff0c;还可能对车辆的悬挂系统、轮胎等造成损害。长期在坑洼路面上行驶&#xff0c;车辆的减震系统、悬挂系统等关键部件容易受损&#xff0c;进…