PAT1044火星數字(java實現)

TNTZS666發表於2019-02-25

題目描述:

火星人是以 13 進位制計數的:

  • 地球人的 0 被火星人稱為 tret。
  • 地球人數字 1 到 12 的火星文分別為:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
  • 火星人將進位以後的 12 個高位數字分別稱為:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。

例如地球人的數字 29 翻譯成火星文就是 hel mar;而火星文 elo nov 對應地球數字 115。為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。


  • 輸入格式
    輸入第一行給出一個正整數 N(<100),隨後 N 行,每行給出一個 [0, 169) 區間內的數字 —— 或者是地球文,或者是火星文。

  • 輸出格式
    對應輸入的每一行,在一行中輸出翻譯後的另一種語言的數字。


解題思路:首先判斷輸入的字串是地球數字還是火星數字,如果是地球數字,則將其轉化為火星文,直接取餘取整操作後取對應陣列對應索引位置的火星文即可,相對較簡單。若是火星文,將其通過空格分割,若長度大於1,通過getIndex函式取得兩個陣列中相應的索引值計算出對應地球的數字,若長度為1,則只需取一個陣列中的索引計算即可

易錯點:當輸入13,26等13的倍數的時候要特別注意,七對應的火星文也是隻有一位。所以需要另加判斷。


程式:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
public static void main(String[] args) throws IOException{
	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	int n = Integer.parseInt(bf.readLine());
	String[] s1 = {"jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
	String[] s2 = {"tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
	for (int i = 0; i < n; i++) {
		String s = bf.readLine();
		int r = 0;
		int a1,a2;
		if (s.matches("[0-9]{1,}")) {
			r=Integer.valueOf(s);
			if (r==0) {
				System.out.println("tret");
				continue;
			}
			if (r<13) {
				a1 = r%13;
				System.out.println(s1[a1-1]);
			}
			if (12<r&&r<169) {
				a2 = r/13;
				a1 = r-a2*13;
				if (a1==0) {
					System.out.println(s2[a2-1]);
				}else {
					System.out.println(s2[a2-1]+" "+s1[a1-1]);
				}
				
			}
		}else{
			if (s.equals("tret")) {
				System.out.println(0);
				continue;
			}
			String[] split = s.split(" ");
			if (split.length!=1) {
				a1 = getIndex(s1, split[1]);
				a2 = getIndex(s2, split[0]);
				System.out.println(a2*13+a1);
		}else {
			a1 = getIndex(s1, split[0]);
			a2 = getIndex(s2, split[0]);
			if (a1!=0) {
				System.out.println(a1);
			}else {
				System.out.println(a2*13);
			}
			
		}
		}
	}
	}
public static int getIndex(String[] arr,String value){
	for (int i = 0; i < arr.length; i++) {
		if (arr[i].equals(value)) {
			return i+1;
		}
	}
	return 0;
}
}


相關文章