华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定一个包含 0 和 1 的二维矩阵, 给定一个初始位置和速度。
一个物体从给定的初始位置出发, 在给定的速度下进行移动, 遇到矩阵的边缘则发生镜面反射无论物体经过 0 还是 1,都不影响其速度。
请计算并给出经过t 时间单位后,物体经过 1 点的次数。
矩阵以左上角位置为0,0,例如坐标为 2 , 1 。
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
注意:
如果初始位置的点是 1, 也计算在内
时间的最小单位为1, 不考虑小于 1 个时间单位内经过的点
二、输入描述
第一行为初始信息
第二行开始一共h行,为二维矩阵信息
其中w,h 为矩阵的宽和高x,y 为起始位置
sx,sy为初始速度t为经过的时间
三、输出描述
经过1的个数。
注意:初始位置也要计算在内
四、解题思路
- 读取和解析输入数据,包括矩阵的大小(宽度和高度)、起始位置、初始速度和模拟时间。
- 根据给定的速度,物体将在矩阵中移动。当物体碰到矩阵的边缘时,它需要反射。具体来说,如果物体触及左边或右边,水平速度反向(sx变号)。如果触及上边或下边,垂直速度反向(sy变号)。
- 统计经过的"1"点数: 在模拟过程中,每次物体到达一个新位置,都需要检查该位置是否为“1”。如果是,则累加计数。
- 从初始时间开始,每个时间单位内更新物体位置,并处理可能的边界反射。
五、Java算法源码
public class Test01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int w = arr[0]; // 宽度int h = arr[1]; // 高度int x = arr[2]; // 初始x位置int y = arr[3]; // 初始y位置int sx = arr[4]; // 初始x速度int sy = arr[5]; // 初始y速度int t = arr[6]; // 时间// 读取矩阵数据int[][] matrix = new int[h][w];for (int i = 0; i < h; i++) {String line = sc.nextLine();for (int j = 0; j < line.length(); j++) {matrix[i][j] = Character.getNumericValue(line.charAt(j));}}// 计数器,初始化为0int count = 0;// 如果起始位置是1,计数if (matrix[y][x] == 1) {count++;}// 模拟运动for (int i = 0; i < t; i++) {// 更新位置x += sx;y += sy;// 处理水平方向的边界反射if (x < 0){x = 1;// 立即修正位置sx = -sx; // 反转速度}else if(x >= w){x = w-2;// 立即修正位置sx = -sx; // 反转速度}// 处理垂直方向的边界反射if (y < 0){y = 1;sy = -sy; // 反转速度}else if (y >= h) {y = h - 2;sy = -sy; // 反转速度}// 计算经过1的次数if (matrix[y][x] == 1) {count++;}}// 输出结果System.out.println(count);}
}
六、效果展示
1、输入
12 7 2 1 1 -1 13
001000010000
001000010000
001000010000
000100001000
001000010000
001000010000
001000010000
2、输出
3
3、说明
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。