您的位置:首页 > 其它

ZOJ 1068 P,MTHBGWB

2017-04-20 07:06 232 查看
查看原题

题意

摩斯电码表已知,给出一串字符,隐含了它转换的摩斯电码和切割长度顺序。问同一行摩斯电码按倒置后的切割长度顺序进行切割,能得到什么字符串。

思路

数组

代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
int main(){
int n;cin>>n;
string Morse[30]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","..--",".-.-","---.","----"};
for(int casenum=1;casenum<=n;casenum++){
int order[101];
string morse="";
string message;
cin>>message;
for(int i=0;i<message.size();i++){
if(message[i]=='_'||message[i]==','||message[i]=='.'||message[i]=='?'){
switch (message[i]){
case '_':order[i]=4;morse+="..--";
break;
case ',':order[i]=4;morse+=".-.-";
break;
case '.':order[i]=4;morse+="---.";
break;
case '?':order[i]=4;morse+="----";
break;
}
}
else{
order[i]=Morse[message[i]-'A'].length();
morse+=Morse[message[i]-'A'];
}
}
int step=0;
cout<<casenum<<": ";
for(int i=message.size()-1;i>=0;i--){
string temp="";
for(int j=0;j<order[i];j++){
temp+=morse[step];
step++;
}
for(int k=0;k<30;k++){
if(Morse[k]==temp){
if(k<26){
printf("%c",'A'+k);
} else{
switch(k){
case 26:cout<<'_';
break;
case 27:cout<<',';
break;
case 28:cout<<'.';
break;
case 29:cout<<'?';
break;
}
}
}
}
}
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: