最新华为OD机试真题-反射计数 (200分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

反射计数 (200分)

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

🍰 反射计数

问题描述

给定一个由 0 和 1 组成的二维矩阵,以及一个初始位置和速度。有一个物体从给定的初始位置出发,以给定的速度移动。物体在矩阵边缘发生镜面反射,无论经过 0 还是 1 都不影响其速度。请计算经过 时间单位后,物体经过 1 点的次数。

注意:

  1. 初始位置的点是 1 时也计算在内。
  2. 时间的最小单位为 1,不考虑小于 1 个时间单位内经过的点。

输入格式

第一行包含七个整数 ,分别表示矩阵的宽度、高度、初始位置的列坐标、行坐标、初始速度的纵向分量、初始速度的横向分量和经过的时间。

接下来 行,每行包含 个整数,表示二维矩阵。

输出格式

一个整数,表示经过的 1 的次数。

样例输入

12 7 2 1 1 -1 13
001000010000
001000010000
001000010000
000100001000
001000010000
001000010000
001000010000

样例输出

3

数据范围

题解

从初始位置开始,在每个时间单位更新物体的位置。如果物体到达矩阵边缘,则反射其速度方向。每当物体经过一个新的位置时,检查该位置的值是否为 1,并更新计数器。

参考代码

  • Python
def count_ones(w, h, y, x, sy, sx, t, matrix):
    res = 0
    if matrix[x][y] == "1":
        res += 1

    for _ in range(t):
        xx = x + sx
        yy = y + sy
        if xx < 0 or xx >= h:
            sx = -sx
        if yy < 0 or yy >= w:
            sy = -sy
        x += sx
        y += sy
        if matrix[x][y] == "1":
            res += 1
    return res

w, h, y, x, sy, sx, t = map(int, input().split())
matrix = [list(input().strip()) for _ in range(h)]
print(count_ones(w, h, y, x, sy, sx, t, matrix))
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int w = sc.nextInt();
        int h = sc.nextInt();
        int y = sc.nextInt();
        int x = sc.nextInt();
        int sy = sc.nextInt();
        int sx = sc.nextInt();
        int t = sc.nextInt();
        sc.nextLine();
        char[][] matrix = new char[h][w];
        for (int i = 0; i < h; i++) {
            matrix[i] = sc.nextLine().toCharArray();
        }

        System.out.println(countOnes(w, h, y, x, sy, sx, t, matrix));
    }

    public static int countOnes(int w, int h, int y, int x, int sy, int sx, int t, char[][] matrix) {
        int res = 0;
        if (matrix[x][y] == '1') {
            res += 1;
        }

        for (int i = 0; i < t; i++) {
            int xx = x + sx;
            int yy = y + sy;
            if (xx < 0 || xx >= h) {
                sx = -sx;
            }
            if (yy < 0 || yy >= w) {
                sy = -sy;
            }
            x += sx;
            y += sy;
            if (matrix[x][y] == '1') {
                res += 1;
            }
        }
        return res;
    }
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;

int countOnes(int w, int h, int y, int x, int sy, int sx, int t, vector<vector<char>>& matrix) {
    int res = 0;
    if (matrix[x][y] == '1') {
        res++;
    }

    for (int i = 0; i < t; i++) {
        int xx = x + sx;
        int yy = y + sy;
        if (xx < 0 || xx >= h) {
            sx = -sx;
        }
        if (yy < 0 || yy >= w) {
            sy = -sy;
        }
        x += sx;
        y += sy;
        if (matrix[x][y] == '1') {
            res++;
        }
    }
    return res;
}

int main() {
    int w, h, y, x, sy, sx, t;
    cin >> w >> h >> y >> x >> sy >> sx >> t;
    vector<vector<char>> matrix(h, vector<char>(w));
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            cin >> matrix[i][j];
        }
    }

    cout << countOnes(w, h, y, x, sy, sx, t, matrix) << endl;
    return 0;
}
#华为OD##华为od##华为od题库##华为##华为OD机试算法题库#
最新华为OD机试-D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测

全部评论

相关推荐

点赞 评论 收藏
分享
1.小作坊(开发5个以内)●&nbsp;面试形式:&nbsp;&nbsp;○&nbsp;笔试+面试&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;笔试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;笔试一般不看简答题内容,直接看选择正确率,不行就没面试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;笔试内容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;基础&nbsp;(e.g.&nbsp;int&nbsp;容量,String&nbsp;包装类)就是那些非常不可思议的东西会考你(可能是我自己的问题,感觉很偏大神勿喷)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;LRU,LFU,集合类空间复杂度,一些基础八股文(JVM&nbsp;,并发&nbsp;一般没人考)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;业务题(pc&nbsp;+&nbsp;移动端&nbsp;扫码流程),有复杂一点的,有简单一点的,看运气吧&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;面试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;技术出身人员面试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;问你些业务流程,机会就没了,但是你别傻傻的就说业务,网你背的八股上面扯,显得高大上点就完了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;CEO(老板面试/非技术出身)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;纯纯,有出无进,对**琴,看眼缘吧(我也不知道怎么说)2.大作坊&nbsp;(10个左右)●&nbsp;上述无异差不多(不多赘述)3.大大作坊(50个以内)●&nbsp;笔试+面试&nbsp;&nbsp;○&nbsp;笔试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;笔试一般不看简答题内容,直接看选择正确率,不行就没面试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;笔试内容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;一些常见的八股文&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;业务题(不会很难,一般自己做过项目都能写出来)&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;面试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;技术出身人员面试(一线开发)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;会问你项目,为什么用这个工具(网八股文上扯,显得高级),业务流程,如何优化。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;架构师/经历&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;会问你项目,为什么用这个工具,有没有别的方法替换下&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;e.g.(还有很多,就拿这个举个例子)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp;日志如何收集&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;1.ELK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;2.nginx&nbsp;反向代理指定位置文件,自己写个消费端,自己处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;中间件的工作流程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;○&nbsp;一些流程问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;以后发展&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■&nbsp;什么时候入职&nbsp;4.小厂(百人左右)●&nbsp;差不多,没啥区别5.中大厂没面试过,母鸡啦!
查看10道真题和解析
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务