1. 程式人生 > >機器人行走 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單, 只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。

機器人行走 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單, 只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。

/*機器人行走
 * 【程式設計題】(滿分18分)
    某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,
    只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。
    例如,我們可以對小車輸入如下的指令:
    15L10R5LRR10R20
    則,小車先直行15釐米,左轉,再走10釐米,再右轉,...
    不難看出,對於此指令串,小車又回到了出發地。
    你的任務是:編寫程式,由使用者輸入指令,程式輸出每條指令執行後小車位置與指令執行前小車位置的直線距離。
【輸入、輸出格式要求】
    使用者先輸入一個整數n(n<100),表示接下來將有n條指令。
    接下來輸入n條指令。每條指令只由L、R和數字組成(數字是0~100之間的整數)
    每條指令的長度不超過256個字元。
    程式則輸出n行結果。
    每條結果表示小車執行相應的指令前後位置的直線距離。要求四捨五入到小數後2位。
    例如:使用者輸入:
5
L100R50R10
3LLL5RR4L12
LL
100R
5L5L5L5
    則程式輸出:
102.96
9.06
0.00
100.00
0.00
 */
import java.util.Scanner;

public class Demo02 {
	static int direction = 1;
	// direction的值 左為0,上為1,右為2,下為3
	static int[] X = {-1, 0, 1,  0};
	static int[] Y = { 0, 1, 0, -1};
	static int x = 0;	// 點座標  x 值 
	static int y = 0;	// 點座標  y 值
	// 輸入資料
	public static String[] input(int n){
		Scanner scan = new Scanner(System.in);
		String[] ss = new String[n];
		for(int i=0;i<n;i++){
			ss[i] = scan.nextLine();
		}
		return ss;
	}
	// 計算xy座標值
	public static void countXY(String ss) {
		if(!ss.equals("")){
			int n = Integer.parseInt(ss);
			x += n * X[direction];
			y += n * Y[direction];
		}
	}
	// 修改方向(direction)
	public static void alterDirection(char c){
		if(c=='L'){	// direction的值 左為0,上為1,右為2,下為3
			direction = (direction+3)%4;
		}else if(c=='R'){
			direction = (direction+1)%4;
		}
	}
	// 進入函式操作
	public static void f(String s){
		String ss="";	// 暫存數字
		for(int i=0;i<s.length();i++){
			char c = s.charAt(i);
			if(c>='0'&&c<='9'){
				ss += c;	// 新增數字
			}else {
				countXY(ss);// 計算xy座標值
				ss = "";	// 清空用過的數字
				alterDirection(c);	// 修改方向(direction)
			}
		}
		countXY(ss);	// for 執行完檢視暫存數字是否還有數字,有的話計算最後一次座標
		ss = "";	// 清空用過的數字
	}
	// 計算xy點與原點的距離,並輸出
	public static void calc(){
		System.out.printf("%.2f\n",Math.sqrt(x*x+y*y));
		x = 0;	// 迴歸原點 為下次計算用
		y = 0;
	}
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		String[] s = input(scan.nextInt());	// 輸入資料
		for(int i=0;i<s.length;i++){
			f(s[i]);	// 進入函式操作
			calc();	// 計算xy點與原點的距離,並輸出
		}
	}
}
執行結果:
5
L100R50R10
3LLL5RR4L12
LL
100R
5L5L5L5
102.96
9.06
0.00
100.00
0.00

相關推薦

機器人行走 某少年宮引進了一批機器人小車。可以接受預先輸入指令,按指令行動。小車基本動作很簡單, 只有3種:左轉(記為L)轉(記為R)向前走若干釐米直接記數字)

/*機器人行走 * 【程式設計題】(滿分18分) 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單, 只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。 例如,我們可以對小車輸入如下的指令

機器人行走( * 某少年宮引進了一批機器人小車。可以接受預先輸入指令,按指令行動。小車基本動作很簡單,只有3種:左轉(記為L)轉(記為R)向前走若干釐米直接記數字) 例如我們)

/** * 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。 例如,我們可以對小車輸入如下的指令: 15L10R5LRR10R20 則,小車先

作業三——求部分中的最大值減去部分最大值的絕對值最大是多少

給定一個長度為N(N>1)的整型陣列A,可以將A劃分成左右兩個部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的範圍是[0,N-2]。求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少? 給定整數陣列A和陣列的大小n,請返回題目所求的答案。 測

Dstream[Row] 資料批量匯入Mysql 並去重大致如果資料庫中有行資料本次執行若有一行與資料庫中的那行相同則不會再插入進去

def Save2Mysql(stateDStream: DStream[Row]): Unit = { stateDStream.foreachRDD { rdd => { rdd.foreachPartition(partitionRecord

解決Android Studio 將String類型保存.txt文件下button跳到文件管理器解決保存txt文件到文件管理後手機打開是亂碼的問題

判斷 text 文件管理器 length button director ioe support get 不知道為什麽保存文件後之前打開一直都OK,就突然打開看到變成亂碼了,最後解決了 關鍵:outStream.write(finalContent.getBytes("g

Gradle的簡介這裡就不羅嗦Google上一大堆這裡就說說它的基本使用吧可以簡單的理解它是Maven的高階版本沒那麼神祕

基本使用流程: 1. 下載 Gradle 到本地,並配置環境變數。 2. 在專案中建立 build.gradle檔案 3. 編寫 build.grade 指令碼 4. 執行grade 命令 快捷使用方法: 下載Android Studio,讓它幫我們搞定一切。 指定依賴: 1.

A裡面載入webview activity 跳至 A activity返回鍵前一個A activity資料沒有

今天遇到的問題 A(裡面載入webview)  activity  跳轉至  A  activity,按返回鍵前一個A activity資料沒有了?() 如何解決的? 解決: webview重寫了 public bool

A裡面載入webview activity 跳至 A activity返回鍵前一個A activity資料沒有

今天遇到的問題 A(裡面載入webview)  activity  跳轉至  A  activity,按返回鍵前一個A activity資料沒有了?() 如何解決的? 解決: webview重寫了

】SVM入門線性分類器的求解——問題的轉化直觀角度

content cli 樣本 image ges 五個 是你 角度 spa SVM入門(六)線性分類器的求解——問題的轉化,直觀角度 讓我再一次比較完整的重復一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若幹,如圖, 圓形的樣本點定為正樣

selenium webdriver 鍵另存下載文件結合robot and autoIt

warn pat case 調用 印度 crs stat into ttext 最近一直在研究selenium webdriver右鍵菜單,發現selenium webdriver 無法操作瀏覽器右鍵菜單,如圖 如果我想右鍵另存為,根本操作不了。 也有在網上看到we

IE9的console不兼容問題 在控制臺打開代碼中要顯示的結果數據到conso這裏無法繼續執行

() 代碼 發現 習慣 csdn out 停止 size rom 轉自 http://blog.csdn.net/ywl570717586/article/details/53084655 今天發現並不是所有瀏覽器都像Google chrome一樣,可以正常使用cons

神戶制鋼坑500家企業 百年老店為何上邪路?企業經營再艱難也不能降低產品質量甚至偷工減料同樣適用於IT行業

目前 海外 自己 不銹鋼 但是 amp 數據 熱鬧 2015年 神戶制鋼這顆爛蘿蔔,拔出它之後帶出的泥越來越多。上周五社長川崎博也又開了記者會,再次道歉,而受到其數據造假影響的客戶數量也從200家飆升到500家。日本政府給神戶制鋼兩周時間調查,還要在一個月內公布原因和對策。

Mac Finder 增加鍵文件打包壓縮免費

zip 簡單的 需要 bus library hellip source service 進制 在 Windows 上用慣了 7-Zip 和 WinRAR,來到 Mac 卻突然發現沒有類似的工具?Mac 自帶的 Zip 工具確實讓人吐糟無力,壓縮率低就不說了,因為 Ma

python練習題寫一個方法 傳進去列表和預期的value 求出所有變量得取值可能性例如list[1,2,3,4,5,6,12,19]value20結果是19+1==20只有可能性要求時間復雜度O(n)

num bubuko com pri def 代碼 data- 取值 .com 題目:(來自光榮之路老師)a+b==valuea+b+c=valuea+b+c+d==valuea+b+c+d+...=valuea和b....取值範圍都在0-value寫一個方法 傳進去列

C/C++ 取整函數ceil(),floor()向上取整向下取整

ceil 最小整數 1.2 ria 使用 整數 html follow line 轉自: C/C++ 取整函數ceil(),floor() C/C++ 取整函數ceil(),floor() #include <math.h> double flo

工作那些事十一談談碼農與農民工區別和發展之路 工作那些事十二如果哪一天沒有電腦 工作那些事十三再次失業

工作那些事系列連結快速通道,不斷更新中: 工作那些事(一)今年工作不好找 工作那些事(二)應聘時填寫個人資訊ABCD 工作那些事(三)什麼樣的公司能吸引你,什麼樣的公司適合你? 工作那些事(四)大公司VS小公司 工作那些事(五)談談專案資料整理和積累 工作那些事(六)談談

訊息中介軟體分散式系統事務一致性解決方案大對比誰最好使?

原文轉載至:https://blog.csdn.net/lovesomnus/article/details/51785108   在分散式系統中,同時滿足“一致性”、“可用性”和“分割槽容錯性”三者是不可能的。分散式系統的事務一致性是一個技術難題,各種解決方案孰優孰劣? 在OLTP系統領域,

()正則化為什麼能防止過擬合 正則化為什麼能防止過擬合重點地方標紅

正則化為什麼能防止過擬合(重點地方標紅了) 正則化方法:防止過擬合,提高泛化能力 在訓練資料不夠多時,或者overtraining時,常常會導致overfitting(過擬合)。其直觀的表現如下圖所示,隨著訓練過程的進行,模型複雜度增加,在training data上的error漸漸減小