您的位置:首页 > 其它

问题 C: Morse Code

2016-06-23 20:19 246 查看
问题 C: Morse Code
时间限制: 2 Sec  内存限制: 128 MB
提交: 59  解决: 27
[提交][状态][讨论版]
题目描述
摩尔斯电码(英语:Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。

--摘自维基百科
摩尔斯电码的代码有点(.),划(-)以及停顿组成。
常见的字符编码见下表:




现在我们有码文,可惜的是字符中间的停顿不见了,例如”-.-.”, 可以被译码为”C”, “KE”,”NN”, “NTE”, “TAE”, “TEN”, “TETE”, 或 “TR”.

输入

仅有一行,由点和划构成的字符串,字符串长度不超过25。

输出
按字母序输出字符串所有可能的译码,每种情况占一行。

样例输入
--.-.
样例输出
GN
GTE
MAE
MEN
METE
MR
QE
TC
TKE
TNN
TNTE
TTAE
TTEN
TTETE
TTR
提示
[提交][状态][讨论版]
来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?cid=1204&pid=2


//全排列写法
#include <cstdio>
#include <cstring>
char B[26];
char A[10];
char DIC[27][5]=
{
".-","-...","-.-.","-..",
".","..-.","--.","....",
"..",".---","-.-",".-..",
"--","-.","---",".--.",
"--.-",".-.","...","-",
"..-","...-",".--","-..-",
"-.--","--.."
};
int Strc(int num,char *L)
{
int len=strlen(DIC[num]);
for(int i=0;i<len;i++)
if(*(L+i)!=DIC[num][i]) return 0;
return 1;
}//比较字符串
void Q_P(int N,int Set,int len)  //全排列过程
{
if(N==Set)  //如果长度达到且满足 则输出
{
for(int i=1;i<=len;i++) putchar(A[i]);
putchar('\n');
}
else
{
for(int i=0;i<26;i++)
{
if(Strc(i,B+Set))
{
A[len+1] = i+'A';
Q_P(N,Set+strlen(DIC[i]),len+1);   //更新长度
}
}
}
}
int main(void)
{
//freopen("D:\\test.txt","r",stdin);
gets(B);
Q_P(strlen(B),0,0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: