欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【UVA 508 --- Morse Mismatches】

程序员文章站 2022-06-03 21:18:04
...

【UVA 508 --- Morse Mismatches】

题目来源:点击进入【UVA 508 — Morse Mismatches】

Description

【UVA 508 --- Morse Mismatches】
Input
【UVA 508 --- Morse Mismatches】
Output
【UVA 508 --- Morse Mismatches】
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;
}