反射计数 - 华为OD统一考试(C卷)
OD统一考试
分值: 200分
题解: Java / Python / C++
题目描述
给定一个包含 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,则将计数器增加。
- 重复上述过程直到达到指定的时间。
- 输出计数器的值,即物体经过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++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答