单点时限: 2.0 sec
内存限制: 256 MB
为了加密英文字符串,设计了一种特殊的加密方法,加密规则如下:
1、每一个英文字母转换为两个数字 a1,a2,表示该英文字母在传统手机键盘上的数字键 a1 上的第 a2 个字母。
例如,字母 G; 转换为 41;,即,字母 G; 为手机键盘上的数字键 4; 上的第 1 个字母;
字母 Z; 转换为 94;,即,字母 Z; 为手机键盘上的数字键 9; 上的第 4 个字母。
2、经过步骤 1 的转换,得到一个数字序列 a1,a2,a3,a4,a5,a6,⋯,an−1,an,(1≤ai≤9,1≤i≤n,n为偶数),再将该数字序列用莫尔斯密码加密得到电文。
例如:
字母序列为:GZGTGOGXNCS
加密过程:
1、字母转换:G(41),Z(94),G(41),T(81),G(41),O(63),G(41),X(92),N(62),C(23),S(74)
2、得到数字序列为:4194418141634192622374;,将该数字序列用莫尔斯密码加密得到如下电文:
…-/.----/----./…-/…-/.----/—…/.----/…-/.----/-…/…–/…-/.----/----./…—/-…/…—/…—/…–/--…/…-
输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。
接下来 T 行,每行输入一个字符串,字符串长度不超过 200 个字符,字符串只包含大写英文字母,不含空格。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题在一行中输出加密后的莫尔斯电文。
说明:在输出时,点信号用字符 .(小数点)表示,长信号用字符 -(减号)表示,数字的莫尔斯电码之间用一个字符 / 分隔。
样例
input
3
THISISASAMPLE
ILOVEYOU
ECNUCS
output
case #0:
—…/.----/…-/…—/…-/…–/--…/…-/…-/…–/--…/…-/…—/.----/–…/…-/…—/.----/-…/.----/–…/.----/…/…–/…–/…—
case #1:
…-/…–/…/…–/-…/…–/—…/…–/…–/…—/----./…–/-…/…–/—…/…—
case #2:
…–/…—/…—/…–/-…/…—/---…/…—/…—/…–/--…/…-
/*
简单模拟
*/
#include<iostream>
#include<algorithm>
using namespace std;
void print(int n) {
string s;
int m=n;
if(n>5)
n=10-n;
for(int i =0 ; i < n; i++)
s+=".";
for(int i=n; i<5; i++)
s+="-";
if(m>5)
reverse(s.begin(),s.end());
cout<<s;
}
int main() {
// print(0);
int t;
cin>>t;
int count=0;
int flag[27];
int index=1;
for(int i = 2; i <= 9; i++) {
int j =3;
if(i==7||i==9)
j++;
for(int k=1; k<=j; k++) {
flag[index++]=i*10+k;
//cout<<flag[index-1]<<" ";
}
}
while(t--) {
string s;
cin>>s;
printf("case #%d:\n",count++);
for(int i = 0; i < s.size(); i++) {
int m=flag[s[i]-'A'+1];
int x=m/10;
int y=m%10;
print(x);
cout<<"/";
print(y);
if(i<s.size()-1)
cout<<"/";
}
cout<<endl;
}
return 0;
}