华为OD机试真题 Java 实现【经典屏保】【2023 B卷 100分】,附详细解题思路

news/2024/12/21 15:54:28/

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、补充说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、再输入
      • 4、再输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

一、题目描述

DVD机在视频输出时,为了保护电视显像管,在待机状态会显示屏保动画,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹。

请根据如下要求,实现屏保Logo坐标的计算。

  1. 屏幕是一个800 * 600 像素的矩形,规定屏幕的左上角为坐标原点,沿横边向右方向为X轴,沿竖边向下为Y轴;
  2. Logo是一个 50 * 25 像素的矩形,初始状态下,左上角点坐标记作(x,y),它在X和Y方向均以1像素/秒的速度运动;
  3. 遇到屏幕四个边缘后,会发生镜面反弹,即以45°碰撞边缘,再改变方向以45°弹出;
  4. 当Logo和四个角碰撞时,两个边缘同时反弹的效果时,Logo会原路返回;

请编码实现,t秒后Logo左上角的坐标。

在这里插入图片描述

二、输入描述

输入3个数字,以空格分割;

x y t

x表示Logo左上角的初始X坐标;
y表示Logo左上角的初始Y坐标;
t表示时间,题目要求t秒后Logo左上角的位置;

三、输出描述

输出2个数字,以空格分割;
x y

第一个数字表示t秒后,Logo左上角的X坐标;
第二个数字表示t秒后,Logo左上角的Y坐标;

四、补充说明

所有用例均保证:

  1. 输入的x和y坐标会保证整个Logo都在屏幕范围内,Logo不会出画;
  2. 所有输入数据都是合法的数值,且不会出现负数;
  3. t的最大值是100000;

四、解题思路

  1. 以最简单的0,0位置起始移动;
  2. 如上图所示,屏幕宽600,长800,屏保成45°角均匀移动,会在(600 - 25 = 575)处,碰到屏幕下沿;
  3. 然后以45°角反弹;
  4. 再过5秒,会变为(580,570),因为横坐标在继续增加,纵坐标在减少;

在这里插入图片描述

五、Java算法源码

package com.guor.od;import java.util.Scanner;public class OdTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// Logo左上角的初始X坐标int x = sc.nextInt();// Logo左上角的初始Y坐标int y = sc.nextInt();// 时间int t = sc.nextInt();int x_step = 1;int y_step = 1;// 屏幕长int width = 800;// 屏幕宽int height = 600;// 求t秒后Logo左上角的位置for (int i = 0; i < t; i++) {if (x == 0) {x_step = 1;}if (y == 0) {y_step = 1;}if (x + 50 == width) {x_step = -1;}if (y + 25 == height) {y_step = -1;}x += x_step;y += y_step;}// 输出t秒后,Logo左上角的X坐标和Y坐标System.out.println(x + " " + y);}
}

六、效果展示

1、输入

0 0 575

2、输出

575 575

在这里插入图片描述

3、再输入

0 0 580

4、再输出

580 570

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/973802.html

相关文章

leetcode 每日一题 874. 模拟行走机器人 c++模拟解法

题目 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度 -1 &#xff1a;向右转 90 度 1 < x < 9 &#xff1a;向前移动 x 个单…

赣货通全球桥接江西制造全球开花,贸易强国供应链出海江西在奋进

“赣货通全球”平台是什么? “赣货通全球”平台是江西制造进入全球供应链的数字贸易平台&#xff0c;平台免费为江西制造打造永不落幕线上国际化“赣品展”。核心的后台功能为企业用户提供大数据获客及营销功能&#xff0c;同时为企业提供贸易全流程的第三方外贸综合服务&…

从ChatGPT谈AI发展方向:全力助推乡村振兴事业快速发展

随着人工智能技术的不断发展&#xff0c;以ChatGPT为代表的颠覆性AI应用破圈&#xff0c;标志着人工智能领域的重大突破&#xff0c;引发全球共振。不少人将ChatGPT的问世比喻为“蒸汽机”&#xff0c;人工智能就此走向“工业时代”。 ChatGPT相较于之前市面上的所有同类产品&a…

Java反射 -- 详细介绍 (框架核心)

反射 是 Java框架 的核心 &#xff0c;无论是Tomcat、SpringMVC、Spring IOC、Spring AOP、动态代理 &#xff0c;都使用到了 反射 反射的作用简单讲就是 无需 new 对象&#xff0c;就可以动态获取到一个类的全部信息&#xff0c;包括 属性、方法&#xff0c;构造器&#xff0…

136. 只出现一次的数字

题目 题解一&#xff1a;采用map集合 class Solution {public static int singleNumber(int[] nums) {Map map new HashMap<Integer,Integer>();for (int i 0; i < nums.length; i) {//判断key是否重复&#xff0c;重复直接删掉重复的keyif (map.containsKey(nums[i…

Hive 中 sort by 和 order by 的区别

order by会对输入做全局排序&#xff0c;因此只有1个reducer&#xff08;多个reducer无法保证全局有序&#xff09;&#xff0c;会导致当输入规模较大时&#xff0c;需要较长的计算时间。 sort by不是全局排序&#xff0c;其在数据进入 reducer 前完成排序。 因此&#xff0c;…

第三讲:k8s核心概念和专业术语

序言&#xff1a;这里只对概念继续基础阐述&#xff0c;不做具体案例&#xff0c;这位博主写的特别详细&#xff0c;想要对k8s深入的了解可以跳转了&#xff0c;作为小白的我看的有点懵&#xff0c;毕竟没实践过 链接地址→ http://t.csdn.cn/ZYtEF 这篇文章写了将近两万字对各…

[SQL系列] 从头开始学PostgreSQL 索引 修改 视图

索引 什么是数据库索引 数据库索引是一种单独的、物理的数据库结构&#xff0c;用于对数据库表中一列或多列的值进行排序。它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引提供指向存储在表的指定列中的数据值的指针&#xff0…