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;
}
/**********************************************************************************/
/* 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;
}