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
全部评论

相关推荐

头像
08-13 14:20
已编辑
门头沟学院 Java
之前在学校的时候,舍友老是熬夜打游戏,周末还喜欢早起打游戏😅,吵得没法睡到自然醒现在出来实习独居后,想干嘛就干嘛,打游戏刷视频,没有任何顾虑,学习工作,也没有人能打扰我🦌就这个独居爽
天才无敌小土豆:之前在学校 宿舍一个巨瘦的哥们天天熬夜打游戏 呼噜声还巨大 我睡觉超级敏感 天天睡不着 我睡他下铺 半夜踹他床板让他飞起来 就那一会不会打呼噜 然后继续 那段时间我感觉我都yw了 后来我换了个远一点的床铺 买了新的那种可以捏小的耳塞 老子睡觉爽死了 后悔大三才发现这种耳塞 老子yw又好了 天天夜里上厕所都梆硬
独居后,你的生活是更好了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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