ZeroJudge E578: Decode the Mad man

題目敘述

本題採EOF方式收資料,每筆資料有一個包含空格的字串,要求輸出每一個字元在鍵盤上往左移動兩格之後的字元 (空格不算,英文字母輸入輸出皆為小寫)。


範例輸入 #1

k[r dyt i[o

p '[nt ]y[jyd.

範例輸出 #1

how are you

i love program


解題思路

使用Map來紀錄每一個字元的對應值。單引號是用 \' 來表示,反斜線則是 \\。

解題程式碼如下 (僅供參考):

#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 M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天