Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
2017-12-09 16:48
211 查看
题目描述
摩尔斯电码(英语:Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。
--摘自维基百科
摩尔斯电码的代码有点(.),划(-)以及停顿组成。
常见的字符编码见下表:
![](https://img-blog.csdn.net/20171209165559881?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVlcHNlYXpidw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
现在我们有码文,可惜的是字符中间的停顿不见了,例如"-.-.", 可以被译码为"C", "KE","NN", "NTE", "TAE", "TEN", "TETE", 或 "TR".
输入
仅有一行,由点和划构成的字符串,字符串长度不超过25。
输出
按字母序输出字符串所有可能的译码,每种情况占一行。
样例输入
--.-.
样例输出
GN
GTE
MAE
MEN
METE
MR
QE
TC
TKE
TNN
TNTE
TTAE
TTENT
TETE
TTR
思路:模拟即可,但是比较巧妙的是利用了指针改变了字符数组,或者使用C++中的数组特性
中间还有个小插曲,就是将输出换行符号用C++中的cout流输出,造成TLE,可见输入输出的可怕
摩尔斯电码(英语:Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。
--摘自维基百科
摩尔斯电码的代码有点(.),划(-)以及停顿组成。
常见的字符编码见下表:
现在我们有码文,可惜的是字符中间的停顿不见了,例如"-.-.", 可以被译码为"C", "KE","NN", "NTE", "TAE", "TEN", "TETE", 或 "TR".
输入
仅有一行,由点和划构成的字符串,字符串长度不超过25。
输出
按字母序输出字符串所有可能的译码,每种情况占一行。
样例输入
--.-.
样例输出
GN
GTE
MAE
MEN
METE
MR
QE
TC
TKE
TNN
TNTE
TTAE
TTENT
TETE
TTR
思路:模拟即可,但是比较巧妙的是利用了指针改变了字符数组,或者使用C++中的数组特性
中间还有个小插曲,就是将输出换行符号用C++中的cout流输出,造成TLE,可见输入输出的可怕
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; char m[27][6]= { ".-","-...","-.-.","-..", ".","..-.","--.","....", "..",".---","-.-",".-..", "--","-.","---",".--.", "--.-",".-.","...","-", "..-","...-",".--","-..-", "-.--","--.." }; char s[30],A[30]; int compare(int num,char L[]) //指针处理数组 int compare(int num,char *L) { int len=strlen(m[num]); for(int i=0;i<len;i++) if(L[i]!=m[num][i]) // 指针处理数组 :if(*(L+i)!=m[num][i]) return 0; return 1; } void q_s(int l,int Set,int len)//全排列过程 { if(l==Set)//如果长度达到且满足 则输出 { for(int i=1;i<=len;i++) putchar(A[i]); printf("\n"); } else { for(int i=0;i<26;i++) { if(compare(i,s+Set)) //判断s剩下未判断的字符 { A[len+1]='A'+i; q_s(l,Set+strlen(m[i]),len+1); //更新长度 排列寻找下一个 } } } } int main() { gets(s); int len=strlen(s); q_s(len,0,0); return 0; }
相关文章推荐
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- 一些常用算法[数组全排列算法,单链表反转(递归实现),字符串反转,桶排序]
- 字符串数组元素排列与组合的Java递归实现
- 用面向对象解决:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列
- 一个打印输入字符串所有排列的递归程序
- Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)
- 字符与字符串(字符数组)的输入区别
- java键盘输入字符串数组
- JAVA 接收键盘输入的字符串,转换成数组,输出ASCLL
- C语言 使用递归 逆序输入的字符串,并且返回保存的结果
- 输入一个字符串内有数字和非数字字符,将连续的数字作为一个整数,存到数组a中,统计整数的个数,并输出这些数
- python使用递归解决全排列数字示例
- python使用递归解决全排列数字示例
- 判断整形数组是按升序还是降序排列的,采用递归的方法
- 实验10指针2(1)输入一个字符串和一个正整数x,将该字符串中的后x个字符复制到另一个字符串y中,输出字符串y;再对y串的内容前后倒置后存入数组z中并输出。