同題:UVa 10222 – Decode the Mad man
BUET大學有一位老教授就發瘋了。他開始說一些奇怪的話。沒有人能夠聽得懂他的上課內容。
最終,BUET大學陷入了難題。無法讓這位老教授繼續在大學教書。
突然有一位學生(肯定是 UVA ACM 章節的註冊作者,並且在 online judge 排名很高) 創造了一個可以將教授說的話解碼的程式。
在此之後,老教授又繼續正常的教書,每個人都感到很開心。
因此,如果你有機會參訪BUET大學,並且看到一位老師正在用裝有語音辨識麥克風講話,你可別嚇到。
因為現在你的工作就是寫相同的程式來解碼瘋狂老教授的語言。
範例測資
範例輸入 | 範例輸出 |
---|---|
EOF 輸入,僅包含一筆測試資料,也就是編碼後的訊息。 這筆測試資料包含一個或多個單字。 字母皆為小寫。 | 根據測試資料,輸出解碼後的單字。 還好,這工作並不難,只要把每個字母或符號以鍵盤上它左邊第二個鍵的符號來取代就行了。 不會有不合理的情況,比方說編碼訊息為 a,但是 a 在鍵盤上沒有左邊。 空白和換行請直接輸出。 |
k[r dyt i[o p ‘[nt ]y[jyd. | how are you i love program |
解題思路
使用Map來紀錄每一個字元的對應值。單引號是用 「\’」來表示,反斜線則是「\」。
範例程式碼-ZeroJudge E578: Decode the Mad Man
#include <iostream>
#include <map>
using namespace std;
int main() {
string str;
map<char, char>MAP;
MAP['2'] = '`';
MAP['3'] = '1';
MAP['4'] = '2';
MAP['5'] = '3';
MAP['6'] = '4';
MAP['7'] = '5';
MAP['8'] = '6';
MAP['9'] = '7';
MAP['0'] = '8';
MAP['-'] = '9';
MAP['='] = '0';
MAP['e'] = 'q';
MAP['r'] = 'w';
MAP['t'] = 'e';
MAP['y'] = 'r';
MAP['u'] = 't';
MAP['i'] = 'y';
MAP['o'] = 'u';
MAP['p'] = 'i';
MAP['['] = 'o';
MAP[']'] = 'p';
MAP['\\'] = '[';
MAP['d'] = 'a';
MAP['f'] = 's';
MAP['g'] = 'd';
MAP['h'] = 'f';
MAP['j'] = 'g';
MAP['k'] = 'h';
MAP['l'] = 'j';
MAP[';'] = 'k';
MAP['\''] = 'l';
MAP['c'] = 'z';
MAP['v'] = 'x';
MAP['b'] = 'c';
MAP['n'] = 'v';
MAP['m'] = 'b';
MAP[','] = 'n';
MAP['.'] = 'm';
MAP['/'] = ',';
MAP[' '] = ' ';
while (getline(cin, str))
{
for (int i = 0; i<str.length(); i++)
{
cout << MAP[str[i]];
}
cout << "\n";
}
}
//ZeroJudge E578
//Dr. SeanXD