1044 火星數字 20 PAT乙級真題

2021-07-15 10:43:41 字數 1932 閱讀 6620

火星人是以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)區間內的數字 —— 或者是地球文,或者是火星文。

輸出格式

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

輸入樣例

4

29

5

elo nov

tam

輸出樣例

hel mar

may

115

13

分析:因為給出的可能是數字(地球文)也有可能是字母(火星文),所以用字串s儲存每一次的輸入,因為如果是火星文則會出現空格,所以用getline接收一行的輸入~計算string s的長度len,判斷s[0]是否是數字,如果是數字,表示是地球文,則需要轉為火星文,執行func1();如果不是數字,則說明是火星文,需要轉為地球文,執行func2();

func1(int t)中,傳入的值是string轉int後的結果stoi(s),因為數字最大不超過168,所以最多隻會輸出兩位火星文,如果t / 13不等於0,說明有高位,所以輸出b[t/13];如果輸出了高位(t/13不等於0)並且t % 13不等於0,說明有高位且有低位,所以此時輸出空格;如果t % 13不等於0,說明有低位,此時輸出a[t % 13];注意,還有個數字0沒有考慮,因為數字0取餘13等於0,但是要特別輸出tret,所以在func1的最後一句判斷中加一句t == 0,並將a[0]位賦值成tret即可解決0的問題~

func2()中,t1和t2一開始都賦值0,s1和s2用來分離火星文單詞,因為火星文字串只可能乙個單詞或者兩個單詞,而且乙個單詞不會超過4,所以先將乙個單詞的賦值給s1,即s1 = s.substr(0, 3);如果len > 4,就將剩下的乙個單詞賦值給s2,即s2 = s.substr(4, 3);然後下標j從1到12遍歷a和b兩個陣列,如果a陣列中有和s1或者s2相等的,說明低位等於j,則將j賦值給t2;如果b陣列中有和s1相等的(b陣列不會和s2相等,因為如果有兩個單詞,s2只可能是低位),說明高位有值,將j賦值給t1,最後輸出t1 * 13 + t2即可~

#include #include using namespace std;

string a[13] = ;

string b[13] = ;

string s;

int len;

void func1(int t)

void func2()

cout << t1 * 13 + t2;

}int main()

return 0;

}

1044 火星數字 20 PAT乙級真題

火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。輸入格式 輸入第一行給出乙個正整數n 100 隨後n行,每行給出乙個 0,169 區間內的數字 或者是地球文,或...

PAT乙級 1044 火星數字 20

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火...

PAT乙級1044 火星數字 20

題目 火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。輸入格式 輸入第一行給出乙個正整數n 100 隨後n行,每行給出乙個 0,169 區間內的數字 或者是地球...