问题 C: Morse Code

问题 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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值