【華為OD題庫-033】經典屏保-java

題目

DVD機在視頻輸出時,為了保護電視顯像管,在待機狀態會顯示"屏保動畫”,如下圖所示,DVD Logo在屏幕內來回運動,碰到邊緣會反彈:請根據如下要求,實現屏保Logo坐標的計算算法
1、屏幕是一個800 * 600像素的矩形,規定屏幕的左上角點坐標原點,沿橫邊向右方向為X軸,沿豎邊向下方向為Y軸
2、Logo是一個50 * 25像素的矩形,初始狀態下,左上角點坐標記做(x,y),它在X和Y方向上均以1像素/秒的速度開始運動;
3、遇到屏幕四個邊緣后,會發生鏡面反彈,即以45°碰撞邊緣,再改變方向以45°彈出;當Logo和四個角碰撞時,兩個邊緣同時反彈的效果是Logo會原路返回。
在這里插入圖片描述
請編碼實現,t秒后Logo左上角點的坐標
輸入描述:
輸入3個數字,以空格分隔:x y t
第一個數字表示Logo左上角點的初始X坐標
第二個數字表示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 10
輸出:
10 10
說明:
輸入樣例表示Logo初始位置在屏幕的左上角點,10s后,Logo在X和Y方向都移動了10像素,因此輸出10 10.
示例2
輸入:
500 570 10
輸出:
510 570
說明:
輸入樣例表示初始狀態下,Logo的下邊緣再有5像素就碰到屏幕下邊緣了,5s后,會與屏幕碰撞,碰撞后,斜向45彈出,又經過5s后,Logo與起始位置相比,水平移動了10像素,垂直方向回到了原來的高度。

思路

送分題,兩種方法:

  1. 程序模擬過程,得到t秒后的坐標
  2. 直接數學計算得出坐標

思路一:程序模擬過程

設一個數組dp=new int[]{1,1},dp[0]=1代表x向右移動1個單位長度,dp[1]代表y向下移動1個單位長度
根據題目要求:
當x到達邊界時(x+50=800),此時應該改變移動方向,即dp[0] = -1
同理可得,當y+25=60時,y也應該改變方向,即dp[1] = -1。
什么時候把方向再改回來呢?當x或者y為0時,應該將dp[0]、dp[1]修改為1
寫一個循環,直接可以得到t秒后x,y的新坐標。每秒x和y的變化過程為:x=x+dp[0];y=y+d[1]

思路二:數學計算

先不考慮越界情況,(x,y)經過t秒后得到的新坐標應該時(x+t,y+t)
考慮越界情況,x的最大值為750,y的最大值為575。x和y變化規律相同,以x為例說明:
當第一次越界時,比如x計算出來等于800,800%750=50,第一次越界應該向左反彈,所以實際的x為:750-50=700
當第二次越界時,比如x計算出來等于1560,1560%750=10,實際的運動軌跡應該是0-750-0-10,此時x的值就等于10
綜上:我們可以直接使用x+t得到x的新坐標,然后計算m,n的值:m=(x+t)/750;n=(x+t)%750
如果m%2=1,即奇數次越界,此時向左反彈,結果應該為750-n;
如果m%2=0,即偶數次越界,此時向右反彈,結果應該為n;

題解

package hwod;import java.util.Arrays;
import java.util.Scanner;public class ScreenProtect {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int x = nums[0], y = nums[1], t = nums[2];int[] res = screenProtect(x, y, t);for (int i = 0; i < res.length; i++) {if (i != 0) System.out.print(" ");System.out.print(res[i]);}}private static int[] screenProtect(int x, int y, int t) {int width = 800, height = 600;int[] dp = new int[]{1, 1};while (t-- > 0) {if (x == 0) {dp[0] = 1;}if (x +50 == width) {dp[0] = -1;}if (y == 0) {dp[1] = 1;}if (y +25 == height) {dp[1] = -1;}x += dp[0];y += dp[1];}return new int[]{x, y};}private static int[] screenProtect2(int x, int y, int t) {int max_x = 800-50, max_y = 600-25;x = x + t;y = y + t;int modx = x % max_x, mody = y % max_y;x = x / max_x % 2 == 1 ? max_x - modx : modx;y = y / max_y % 2 == 1 ? max_y - mody : mody;return new int[]{x, y};}
}

推薦

如果你對本系列的其他題目感興趣,可以參考華為OD機試真題及題解(JAVA),查看當前專欄更新的所有題目。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3 provide 和 inject 實現祖組件和后代組件通信

provide 和 inject 能夠實現祖組件和其任意的后代組件之間通信&#xff1a; 一、provide 提供數據 我們在祖組件中使用provide 將數據提供出去。 使用provide 之前需要先進行引入&#xff1a; import { provide } from "vue"; 語法格式如下&#xff1a; provide(&q…

objectarx + libcurl下載文件遇到的問題

下載失敗導致cad崩潰,報錯’Error handler re-entered.Exiting now ,原因是因為我將libcurl相關的功能繼承到一個類中,在類中進行相關的webapi交互,但是由于最開始進行了請求所以沒有將curl進行初始化導致的傳遞數據錯誤.只需要在函數開始時進行初始化即可. curl curl_easy_i…

山西電力市場日前價格預測【2023-11-23】

日前價格預測 預測說明&#xff1a; 如上圖所示&#xff0c;預測明日&#xff08;2023-11-23&#xff09;山西電力市場全天平均日前電價為148.77元/MWh。其中&#xff0c;最高日前電價為420.40元/MWh&#xff0c;預計出現在18:00。最低日前電價為0.00元/MWh&#xff0c;預計出…

微信小程序開發學習——頁面布局、初始導航欄與跳轉

1.盒模型 要求實現效果如圖所示&#xff1a; 所有WXML元素都可以看作盒子&#xff0c;在WXSS中"box model”這一術語是用來設計和布局時使用盒模型本質上是一個盒子&#xff0c;封裝周圍的WXML元素它包括: 邊距&#xff0c;邊框&#xff0c;填充和實際內容&#xff0c;模…

【Java并發編程十一】同步控制三

LockSupport 線程阻塞工具 LockSupport的unpark() 方法可以先執行。 import java.util.ArrayList; import java.util.Random; import java.util.concurrent.*; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.LockSupport; import java.uti…

RAW RGB YUV數據差異

目錄 顏色與色彩空間 RAW圖像 RGB圖像 YUV圖像 顏色與色彩空間 顏色 顏色是人眼感知到的現象&#xff0c;它是由光波的頻率和強度所決定的&#xff0c;僅僅存在于人的眼睛和大腦中&#xff0c;因此為了方便描述顏色&#xff0c;引入了色彩空間。色彩空間 色彩空間&#xff…

C語言--數組與指針--打印字符串的n種方式

一.知識背景 一維數組名的含義 arr一般表示數組的起始地址&#xff08;除了兩種例外&#xff09; 1.在定義數組的同一個函數中(不是形參),求sizeof(arr),求整個數組的字節數 2.在定義數組的同一個函數中(不是形參),&arr1,加整個數組的大小 (經常考試) 3.除上面以外,arr都表…

和鯨 × 暨大經管:高效 SAAS 服務持續賦能交叉學科應用型數據人才培養

隨著新一輪科技革命與產業變革的加速演進&#xff0c;擁有學科背景的應用型數據科學人才逐漸成為我國政產學研各界的人力資源需求重點。為響應需求&#xff0c;國家愈發重視新生力量數據思維與意識的培養&#xff0c;各高校也紛紛探索如何以新興信息技術賦能傳統主流學科。 在…

達索系統SOLIDWORKS流體分析網格劃分失敗,大多是這2種原因

SOLIDWORKS Flow Simulation 是直觀的流體力學 (CFD) 分析軟件&#xff0c;該軟件功能強大、操作人性化&#xff0c;快速輕松的分析產品內部或外部流體的流動情況&#xff0c;以用來改善產品性能和功能。 當流體分析運行網格劃分時&#xff0c;提示失敗。 這是由于凸起面與圓…

【LeetCode刷題】--43.字符串相乘

43.字符串相乘 方法一&#xff1a;做加法&#xff0c;模擬豎式乘法的方法計算乘積 class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")){return "0";}String res "0";//nu…

Hadoop -hdfs的讀寫請求

1、HDFS寫數據&#xff08;宏觀&#xff09;&#xff1a; 1、首先&#xff0c;客戶端發送一個寫數據的請求&#xff0c;通過rpc與NN建立連接&#xff0c;NN會做一些簡單的校驗&#xff0c;文件是否存在&#xff0c;是否有空間存儲數據等。 2、NN就會將校驗的結果發送給客戶端…

3、基礎入門——抓包封包協議APP小程序PC應用web應用

知識點 APP&小程序&PC抓包HTTP/S數據——Charles、Fiddler、Burpsuit;程序進程&網絡接口&其他協議抓包——Wireshark、科來網絡分析系統、TCPDump(linux)&#xff1b;通訊類應用封包分析發送接收——WPE四件套封包、科來網絡分析系統。模擬器&#xff1a;逍遙…

解決requests庫進行爬蟲ip請求時遇到的錯誤的方法

目錄 一、超時錯誤 二、連接錯誤 三、拒絕服務錯誤 四、內容編碼錯誤 五、HTTP錯誤 在利用requests庫進行網絡爬蟲的IP請求時&#xff0c;我們可能會遇到各種錯誤&#xff0c;如超時、連接錯誤、拒絕服務等等。這些錯誤通常是由目標網站的限制、網絡問題或我們的爬蟲代碼中…

前端性能優化總結

這里寫目錄標題 頁面性能測試工具測試指標 前端頁面性能常見的問題前端頁面性能優化常見策略及方案dns優化------預解析域名&#xff08;異步進行&#xff09;http請求優化減少請求次數同時多開持久連接 前面面試url從輸入到確認搜索發生了什么js介紹new一個對象的過程&#xf…

Linux 進程等待

在2號手冊里查wait&#xff08;&#xff09;。wait()等待任意一個子進程的狀態。 wait&#xff08;&#xff09;等待成功會返回該子進程的id,返回失敗會返回-1&#xff1a; 小實驗 子進程的退出碼 子進程執行work()&#xff0c;父進程wait子進程。 子進程跑完5秒之后就e…

GCANet_Gated context aggregation network for image dehazing and deraining

2019、中科大港科、有代碼 Chen D, He M, Fan Q, et al. Gated context aggregation network for image dehazing and deraining[C]//2019 IEEE winter conference on applications of computer vision (WACV). IEEE, 2019: 1375-1383. GitHub - cddlyf/GCANet: Implementation…

丟掉破解版,官方免費了!!!

哈嘍&#xff01;大家好。 幾天不見&#xff0c;今天給大家帶來一款海外的神器&#xff0c;官方宣布完全免費&#xff0c;但僅限于個人與教育用途&#xff0c;切勿商用噢&#xff01; 不要看這個軟件名字普普通通&#xff0c;實際上內蘊乾坤&#xff01; 接下來看我給大家炫一…

隊列的實現和OJ練習(c語言)

目錄 概念 隊列的實現 利用結構體存放隊列結構 為什么單鏈表不使用這種方法&#xff1f; 初始化隊列 小提示&#xff1a; 隊尾入隊列 隊頭出隊列 獲取隊頭元素 獲取隊尾元素 獲取隊列中有效元素個數 檢測隊列是否為空 銷毀隊列 最終代碼 循環隊列 隊列的OJ題 …

元素清空操作clear與選擇操作check

元素清空操作clear與選擇操作check clear() 作用 清空輸入框的所有內容.clear() 等價于 .type("{selectall}{backspace}") 語法 .clear() .clear(options)option選項 元素選中操作check與uncheck check 語法 // 所有匹配到的選擇框都會被選中一遍 .check()/…

CISP模擬考試(二)

免責聲明 文章僅做經驗分享用途,利用本文章所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,作者不為此承擔任何責任,一旦造成后果請自行承擔!!! 1.DDoS攻擊主要目的是: A.破壞完整性 B.破壞機密性 C.破壞可用性 D.破壞不可抵賴性 答案:…