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[++] != ' ' ,感觉这题目很好所以发到博客来。
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] = '