2013-02-22 22:08:32Morris

[ZJ] a631. 11. LED Decoder

內容 :

有些 LED 系統用線段來表示字元,就像某些計算機或加油機一樣。假設我們就有一個這樣的 LED 系統,其中每個標準的英文字母都是由 10 個可能的線段來組成,這些線段的編號如右圖:

例 如,字母 A 是用 1, 2, 3, 4, 5, 和 7 這些線段來表示。用這幾個線段當然無法顯示這 26 個字母的完美形狀。我們所使用的系統的表示方式表列如下。你的工作是要把一堆數字 (代表線段) 的組合翻譯成相對應的字母,最後形成一整個字或片語。輸入為一個含字母及/或數字的字串。你的輸出則是一字母的字串。 

輸入說明 :

每 筆測資一行,每一行含有字母、空白、及/或數字。如果是數字,它們的結合一定可以形成正確的 LED 字母。每個字母以數字的組合來表示。不屬於任何一正確的字母代號的零 (0) 就解譯為空白。你可以假設輸入中沒有錯誤的字母代號。系統也不會允許兩個字母代號間的混淆。

輸出說明 :

輸出解碼後的結果。字母和空白不要解碼,只有數字必須轉換成對應的 LED 字母。

範例輸入 :

HELL1235670WO1234591561580
PROGRAMMING037124670C123567123567156
AND MORE037124903735790278134573712467045612356735792781245612467278

範例輸出 :

HELLO WORLD
PROGRAMMING IS COOL
AND MORE IF IN THIS CONTEST

提示 :

出處 :

HP CodeWars 2007 (管理:snail)


/**********************************************************************************/
/*  Problem: a631 "11. LED Decoder" from HP CodeWars 2007                         */
/*  Language: CPP (1415 Bytes)                                                    */
/*  Result: AC(4ms, 396KB) judge by this@ZeroJudge                                */
/*  Author: morris1028 at 2013-02-20 14:44:12                                     */
/**********************************************************************************/


#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;

int main() {
    map<string, char> R;
    R["123457"] = 'A', R["1234567"] = 'B';
    R["456"] = 'C', R["1580"] = 'D';
    R["12456"] = 'E', R["1249"] = 'F';
    R["12569"] = 'G', R["13457"] = 'H';
    R["37"] = 'I', R["3567"] = 'J';
    R["13459"] = 'K', R["156"] = 'L';
    R["12357"] = 'M', R["3579"] = 'N';
    R["123567"] = 'O', R["1458"] = 'P';
    R["12347"] = 'Q', R["123459"] = 'R';
    R["12467"] = 'S', R["278"] = 'T';
    R["13567"] = 'U', R["1379"] = 'V';
    R["135790"] = 'W', R["90"] = 'X';
    R["1347"] = 'Y', R["23456"] = 'Z';
    char s[1024];
    while(gets(s)) {
        int i, j;
        for(i = 0; s[i]; i++) {
            if(s[i] < '0' || s[i] > '9')
                putchar(s[i]);
            else {
                j = i;
                int flag = 0;
                while(s[i+1] <= '9') {
                    i++;
                    int tmp = s[i+1];
                    s[i+1] = 0;
                    if(R.find(s+j) != R.end()) {
                        putchar(R[s+j]);
                        flag = 1;
                        s[i+1] = tmp;
                        break;
                    }
                    s[i+1] = tmp;
                }
                if(!flag)   putchar(' '), i = j;
            }
        }
        puts("");
    }
    return 0;
}