【UVA 508 --- Morse Mismatches】
程序员文章站
2022-06-03 21:18:04
...
【UVA 508 --- Morse Mismatches】
题目来源:点击进入【UVA 508 — Morse Mismatches】
Description
Input
Output
Sample Input
A .-
B -...
C -.-.
D -..
E .
F ..-.
G --.
H ....
I ..
J .---
K -.-
L .-..
M --
N -.
O ---
P .--.
Q --.-
R .-.
S ...
T -
U ..-
V ...-
W .--
X -..-
Y -.--
Z --..
0 ------
1 .-----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.
*
AN
EARTHQUAKE
EAT
GOD
HATH
IM
READY
TO
WHAT
WROTH
*
.--.....-- .....--....
--.----.. .--.-.----..
.--.....-- .--.
..-.-.-....--.-..-.--.-.
..-- .-...--..-.--
---- ..--
*
Sample Output
WHAT
HATH
GOD
WROTH?
WHAT
AN
EARTHQUAKE
EAT!
READY
TO
EAT!
解题思路
通过数组str来记录字符与莫尔斯电码的对应关系。
通过word数组来记录输入的单词并且将整个单词转化成莫尔斯电码并用s数组记录。
通过size记录相对应的莫尔斯电码长度。
然后输入一个字符串遍历所有单词所对应的莫尔斯电码。最后输出相应单词即可。
AC代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
char str[36][10],word[105][15],s[105][65],ss[85];
int size[105];
int fun(char ch)
{
if(ch>='0' && ch<='9') return ch-'0';
return ch-'A'+10;
}
int main()
{
char ch;
int ix=0;
while(scanf(" %c",&ch) && ch!='*')
scanf(" %s",str[fun(ch)]);
getchar();
while(scanf("%s",word[ix]) && word[ix][0]!='*')
{
int len=strlen(word[ix]);
int x=0,y,z;
for(int i=0;i<len;i++)
{
y=fun(word[ix][i]);
z=strlen(str[y]);
for(int j=0;j<z;j++)
s[ix][x+j]=str[y][j];
x+=z;
}
size[ix]=x;
s[ix][x]='\0';
ix++;
}
while(scanf(" %s",ss) && ss[0]!='*')
{
int x=strlen(ss),ans,num=85;
char res='#';
for(int i=0;i<ix;i++)
{
int len=x>size[i] ? size[i] : x;
bool flag=false;
for(int j=0;j<len;j++)
if(ss[j]!=s[i][j]) {flag=true; break;}
if(!flag)
{
int y=abs(x-size[i]);
if(y<=num)
{
if(num==0) res='!';
else
{
ans=i;
num=y;
}
}
}
}
if(num>0) res='?';
printf("%s",word[ans]);
if(res=='#') printf("\n");
else printf("%c\n",res);
}
return 0;
}
下一篇: 路由器实现静态NAT