反射计数 - 华为OD统一考试(C卷)

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为经过的时间

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

输出描述

经过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(), 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答

全部评论
坐标点01没看到有规则控制呢
点赞 回复
分享
发布于 03-26 03:30 江苏
现在od外包都那么难搞咯?
点赞 回复
分享
发布于 03-26 06:30 广东
联易融
校招火热招聘中
官网直投
这个sx sy代表什么意思,每次向列移动1,向行移动-1吗
点赞 回复
分享
发布于 04-23 21:52 浙江

相关推荐

3 4 评论
分享
牛客网
牛客企业服务