close
題目概要:
1. 找出機器人移動後的位子和面向的方位。
2. R=右轉,L=左轉,F=向前走(以目前的方位走一步 Ex 現在面對北方則Y++,面向東方則X++,面向南方則Y--,面向西方則X--)。當前一個機器人摔下去前的位子需要紀錄,後來到此點的機器人會知道面沒有路,所以不會前進。
3. 機器人移動範圍0<=X<=50,0<=Y<=50 。
解題方向:
1. 自定義一個method判斷進行右轉或左轉後的方位。(也可以把此功能直接打main裡面,只是感覺有點亂)
2. 使用一個陣列紀錄機器人超出界線前的位子。
3. 判斷是不是"之前"有機器人超出界線or"目前"的機器人超出界外,再依情況輸出結果。
程式碼:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Java | |
import java.util.Scanner; | |
import java.util.Arrays; | |
class uva118{ | |
public static void main(String args[]){ | |
Scanner sc=new Scanner(System.in); | |
int edgeX=sc.nextInt(); //邊界X。 | |
int edgeY=sc.nextInt(); //邊界Y。 | |
boolean array[][]=new boolean[51][51]; //紀錄之前是否有機器人掉落。 | |
for(int i=0;i<51;i++) Arrays.fill(array[i],false); | |
while(sc.hasNextInt()){ | |
int x=sc.nextInt(); //目前X座標。 | |
int y=sc.nextInt(); //目前Y座標。 | |
char position=sc.next().charAt(0); //目前面向方向。 | |
String cmd=sc.next(); //指令 | |
for(int i=0;i<cmd.length();i++){ | |
if(cmd.charAt(i)=='F'){ | |
int tempX=x,tempY=y; | |
//判斷座標是否加減 | |
if(position=='N') tempY++; | |
else if(position=='S')tempY--; | |
else if(position=='W')tempX--; | |
else tempX++; | |
//判斷座標"之前"是否有機器人超出界線、"目前"的機器人是否超出界線。 | |
if(tempX>edgeX || tempY>edgeY || tempX<0 || tempY<0){ | |
//"之前"無機器人超出界線且"目前"機器人超出界線。 | |
if(!array[x][y]){ | |
array[x][y]=true; | |
//輸出答案(超出界線)。 | |
System.out.println(x+" "+y+" "+position+" LOST"); | |
break; | |
} | |
}else{ | |
x=tempX; | |
y=tempY; | |
} | |
}else{ | |
//查詢方向。 | |
position=findP(position,cmd.charAt(i)); | |
} | |
//當指令是最後一筆時即可輸出答案(無超出界線)。 | |
if(i==cmd.length()-1) System.out.println(x+" "+y+" "+position); | |
} | |
} | |
} | |
//自定義查詢方向的method。 | |
public static char findP(char p,char cmd){ | |
switch(cmd){ | |
case 'R': | |
switch(p){ | |
case 'N': | |
p='E'; | |
break; | |
case 'S': | |
p='W'; | |
break; | |
case 'W': | |
p='N'; | |
break; | |
case 'E': | |
p='S'; | |
break; | |
} | |
break; | |
case 'L': | |
switch(p){ | |
case 'N': | |
p='W'; | |
break; | |
case 'S': | |
p='E'; | |
break; | |
case 'W': | |
p='S'; | |
break; | |
case 'E': | |
p='N'; | |
break; | |
} | |
break; | |
} | |
return p; | |
} | |
} |
文章標籤
全站熱搜