问题 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; }
相关文章推荐
- math-竖式除法longdiv
- 流量协议包注入神器--t50
- Java包装类
- C++课程学期总结
- php源代码搜索分页
- 学习笔记:使用 OpenCV 识别 QRCode
- 【风马一族_Android】强制activity的横屏与纵屏
- 索引器、哈希表Hashtabl、字典Dictionary(转)
- 权限框架 - shiro 授权demo
- AC water1 水题
- 人脸识别——必读文章
- 图片以嵌入式格式插入后,本来应该是和文字平铺分开的,这里重叠到一起了,而且沉在文字底下
- 第十六周学习进度
- C#关于控件的上下左右移动
- Activity四种启动模式详解
- PAYPAL开发--REST API HATEOAS links
- 第二章:Java EE Eclipse+Tomcat开发环境
- 2016下学期c++学习总结
- Random类
- windows10 修改hosts文件