SZU:L89 Frog Encoding

Judge Info

  • Memory Limit: 65536KB
  • Case Time Limit: 3000MS
  • Time Limit: 3000MS
  • Judger: Normal

Description

青蛙们发现在传输信件时经常会被别人偷看,愤怒的青蛙向码农们求救。于是,码农们为它们提供了一套加密和解密的方法,从而将它们的信件内容加密成一段莫尔斯电码。现在给出译码程序:
0.加密序列为:

----**----***--**---**---*------******--***--**---**---*----**---***---*****----***--**-----******--

1.每五个字符为一段的莫尔斯电码各对应着一个数字,将其转换为数字为:

91322173322123613273

2.将该串数字分拆为两个一小段的形式:

91 32 21 73 32 21 23 61 32 73

3.按以上每小段中的两个数字在手机上输出字母,当该两个数字为xy时,按y次数字键x即可得到对应字母(如91='w'),以下为对应字母串:

WEAREACMER

至此,"WEAREACMER(We are ACMer)"即为解密序列,加密序列已解密成功。 现在,你能将程序中所输入的一串加密序列解密吗?

Input

第一行输入Case个数t(t<500),对于余下t行,每行输入一串莫尔斯电码序列(保证序列有效,序列长度为l,l为10的整数倍且l<5000)

Output

对于每个Case,输出一行,以表示其对应结果(所有字母用大写表示)

Sample Input

1
----**----***--**---**---*------******--***--**---**---*----**---***---*****----***--**-----******--

Sample Output

WEAREACMER

Init

莫尔斯电码表:
0 ----- 1 *----
2 **--- 3 ***--
4 ****- 5 *****
6 -**** 7 --***
8 ---** 9 ----*

手机键盘字母对应表:
2 ABC   3 DEF
4 GHI   5 JKL
6 MNO   7 PQRS
8 TUV   9 WXYZ

解题思路:用二维数组来做,而且用到了C程序设计语言第一章的 s[++] = a[++] != '\0' ,感觉这题目很好所以发到博客来。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char M[10][6] = {"-----","*----","**---","***--","****-","*****","-****","--***","---**","----*"};
 5 char N[10][5]={"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
 6 char s[5012];
 7 char A[10];
 8 int B[1012];
 9 int main() {
10     int t,i,k,j, len;
11     scanf("%d", &t);
12     while (t--) {
13         scanf("%s", s);
14         len = strlen(s);
15         for (i=0;i<len;i+=5) {
16             j=i;
17             k=0;
18             while (k<5) 
19                 A[k++] = s[j++];
20             A[5] = '\0';
21             for(j=0;j<10;j++) if(strcmp(A,M[j])==0) break;
22             B[i/5] = j;
23     //        printf("%d", j);
24         }
25         for(i=0;i<len/10;++i)
26             putchar(N[B[2*i]][B[2*i+1]-1]);
27         printf("\n");
28     }
29     
30 }

 

 
posted @ 2013-07-12 13:26  Levi.duan  阅读(180)  评论(0编辑  收藏  举报