「计蒜客」机器人
前言:
看了很多博主寫的博客,對于基礎不好的我,看的很是吃力,于是寫出這一篇易懂的方法。
一.題目描述
蒜頭君收到了一份禮物,是一個最新版的機器人。這個機器人有 444 種指令:
現在把機器人放在坐標軸原點,起始朝向為 x 軸正方向。經過一系列指令以后,你能告訴蒜頭君機器人的坐標位置嗎。坐標軸上一個單位長度表示 1米。
輸入格式:
第一行輸入一個整數 n(1≤n≤100 表示指令的個數。
接下里 n 行,每行輸入形如上面的指令,其中 ?1000≤x≤1000
輸出格式:
輸出兩個整數 x,yx,yx,y 表示機器人最后坐標。用空格隔開。
樣例輸入
10 back -9 left 3 left 8 back 15 right 10 right -7 right -3 left 11 right 17 left 3樣例輸出
9 -7二.算法分析
這道題這個機器人的走法是:先改變方向,再走;再以原來方向的基礎上,改變方向…
1.定義數組
我們需要定義兩個數組來定義他的方向
定義這個數組的方式就和坐標系有關
定義方向的數組可以順時針定義或逆時針定義(這里選擇逆時針定義)
由此我們根據順序可以定義出方向數組
dx = [0,-1,0,1]
dy = [1,0,-1,0]
因為這個機器人開始的時候方向是面向x軸正半軸
就相當于以我設置的這個方向逆時針走三步,則到機器人現在的方向
所以d = 3,dx[d],dy[d]就表示現在機器人的方向
2.我們要分析機器人的走向
- 假如機器人向后走,那么就像我們體育課向后轉一樣,我們要連續向左轉兩次.
故: d = (d + 2) % 4; - 假如機器人向右走,那么我們要連續向左轉三次(因為我們定義就是逆時針旋轉)
故: d = (d + 3) % 4; - 假如機器人向左走,那么我們向左轉一次。
故: d = (d + 1) % 4;
三.代碼實現
public class _20機器人 {public static void main(String args[]){int[] dx = new int[]{0,-1,0,1};int[] dy = new int[]{1,0,-1,0};int nowx = 0; //開始時機器人的坐標int nowy = 0;int d = 3; //剛開始,機器人是面向x軸正半軸Scanner sc = new Scanner(System.in);int n = sc.nextInt();for(int i = 0 ; i < n ; i++){String s = sc.next();int N = sc.nextInt();if(s.equals("back")){d = (d + 2) % 4;} else if(s.equals("left")){d = (d + 1) % 4;}else if(s.equals("right")){d = (d + 3) % 4;}nowx += dx[d] * N;nowy += dy[d] * N;}System.out.println(nowx+" "+nowy);} }第一次寫博客,大家有什么看不懂的地方,大家可以回復我,我會及時回復。若有地方寫的不好,或者寫的不對的地方,也希望大家可以幫忙揪出來嘻嘻嘻嘻。希望大家一起變成優秀的學習冠軍。
總結
- 上一篇: java-php-net-python-
- 下一篇: 中泰资管天团丨如何用量化复制巴菲特?