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 13001000010000001000010000001000010000000100001000001000010000001000010000001000010000输出:3说明:初始位置为(2,1),速度为(1,-1),那么13个时间单位后,经过点1的个数为3题解解题思路:读取输入的初始信息和二维矩阵。使用循环模拟物体的运动,根据速度更新物体的位置,如果遇到矩阵边缘则进行反射。在每次移动过程中,如果物体当前位置为1,则将计数器增加。重复上述过程直到达到指定的时间。输出计数器的值,即物体经过1的次数。代码特点:使用二维数组表示矩阵。通过循环模拟物体的运动。使用条件判断处理边界反射。这是一个简单的模拟题,主要考察对物体运动轨迹的模拟和条件判断的处理。Javaimport 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);    }}Pythonw, h, x, y, sx, sy, t = map(int, input().split())g = [list(input()) for _ in range(h)]ans = 0for _ in range(t+1):    if g[y][x] == '1':        ans += 1    nx = x + sx    if nx < 0 or nx >= w:        sx = -sx  # 边界发生反射    ny = y + sy    if ny < 0 or ny >= h:        sy = -sy  # 边界发生反射    x += sx    y += 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;}🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏
点赞 3
评论 3
全部评论

相关推荐

07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
真三hjdlxn:这么能吹还能找不到实习啊? 市分行写TOP投行,2个月的实习写半页。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务