编程题:4012 摩尔斯编码
摩尔斯编码采用变长的点号“.”和短划线“-”序列来代表字符。实际编码时,电文中的字符用空格隔开。表4.1是摩尔斯编码中各字符对应的编码。
表 摩尔斯编码表

注意,在上表中点号和短划线有4个组合没有采用。在本题中,将这四种组合分配给以下的字符:
下划线:..-- 点号:---. 逗号:.-.- 问号:----
因此,电文“ACM_GREATER_NY_REGION”被编码为:.- -.-. -- ..-- --. .-. . .- - . .-. ..-- -. -.-- ..-- .-. . --. .. --- -.
Ohaver基于摩尔斯编码提出了一种加密方法。这种方法的思路是去掉字符间的空格,并且在编码后给出每个字符编码的长度。例如电文“ACM”编码为“.--.-.--242”。
Ohaver的加密(解密也是一样的)方法分为3个步骤:
(1)将原文转换成摩尔斯编码,去掉字符间的空格,然后把每个字符长度的信息添加在后面;
(2)将表示各字符长度的字符串反转;
(3)按照反转后的各字符长度,解释点号和短划线序列,得到密文。
例如,假设密文为“AKADTOF_IBOETATUK_IJN”,解密步骤如下:
(1)将密文转换为摩尔斯编码,去掉字符间的空格,添加各字符长度组成的字符串,得到“.--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242”;
(2)将字符长度字符串反转,得到“242433121134244313232”;
(3)对字符长度字符串反转后的编码字符串,用摩尔斯编码解释该字符串,得到原文“ACM_GREATER_NY_REGION”。
本题目的目的是实现Ohaver的解密算法。
### 输入格式:
输入文件中包含多个测试数据。输入文件的第1行是一个整数n,表示测试数据的个数。每个测试数据占一行,为一个用Ohaver加密算法加密后的密文。每个密文中允许出现的符号为:大写字母,下划线、逗号,点号和问号。密文长度不超过100个字符。
### 输出格式:
对输入文件中的每个密文,首先输出密文的序号,然后是冒号和空格,最后是解码后的原文。
### 输入样例:
in
5
AKADTOF_IBOETATUK_IJN
PUEL
QEWOISE.EIVCAEFNRXTBELYTGD.
?EJHUT.TSMYGW?EJHOT
DSU.XFNCJEVE.OE_UJDXNO_YHU?VIDWDHPDJIKXZT?E
### 输出样例:
out
1: ACM_GREATER_NY_REGION
2: PERL
3: QUOTH_THE_RAVEN,_NEVERMORE.
4: TO_BE_OR_NOT_TO_BE?
5: THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG
答案:若无答案欢迎评论
表 摩尔斯编码表

注意,在上表中点号和短划线有4个组合没有采用。在本题中,将这四种组合分配给以下的字符:
下划线:..-- 点号:---. 逗号:.-.- 问号:----
因此,电文“ACM_GREATER_NY_REGION”被编码为:.- -.-. -- ..-- --. .-. . .- - . .-. ..-- -. -.-- ..-- .-. . --. .. --- -.
Ohaver基于摩尔斯编码提出了一种加密方法。这种方法的思路是去掉字符间的空格,并且在编码后给出每个字符编码的长度。例如电文“ACM”编码为“.--.-.--242”。
Ohaver的加密(解密也是一样的)方法分为3个步骤:
(1)将原文转换成摩尔斯编码,去掉字符间的空格,然后把每个字符长度的信息添加在后面;
(2)将表示各字符长度的字符串反转;
(3)按照反转后的各字符长度,解释点号和短划线序列,得到密文。
例如,假设密文为“AKADTOF_IBOETATUK_IJN”,解密步骤如下:
(1)将密文转换为摩尔斯编码,去掉字符间的空格,添加各字符长度组成的字符串,得到“.--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242”;
(2)将字符长度字符串反转,得到“242433121134244313232”;
(3)对字符长度字符串反转后的编码字符串,用摩尔斯编码解释该字符串,得到原文“ACM_GREATER_NY_REGION”。
本题目的目的是实现Ohaver的解密算法。
### 输入格式:
输入文件中包含多个测试数据。输入文件的第1行是一个整数n,表示测试数据的个数。每个测试数据占一行,为一个用Ohaver加密算法加密后的密文。每个密文中允许出现的符号为:大写字母,下划线、逗号,点号和问号。密文长度不超过100个字符。
### 输出格式:
对输入文件中的每个密文,首先输出密文的序号,然后是冒号和空格,最后是解码后的原文。
### 输入样例:
in
5
AKADTOF_IBOETATUK_IJN
PUEL
QEWOISE.EIVCAEFNRXTBELYTGD.
?EJHUT.TSMYGW?EJHOT
DSU.XFNCJEVE.OE_UJDXNO_YHU?VIDWDHPDJIKXZT?E
### 输出样例:
out
1: ACM_GREATER_NY_REGION
2: PERL
3: QUOTH_THE_RAVEN,_NEVERMORE.
4: TO_BE_OR_NOT_TO_BE?
5: THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG
答案:若无答案欢迎评论