• ECNU 3061 莫尔斯电码


    ECNU 3061 莫尔斯电码

    链接

    https://acm.ecnu.edu.cn/problem/3061

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    摩尔斯电码(Morse code)是美国人艾尔菲德 . 维尔于 1837 年发明的一种时通时断的信号代码。摩尔斯电码由两种基本信号和不同的间隔时间组成。

    两种基本信号为:短促的点信号.,读滴(Di);保持一定时间的长信号-,读嗒(Da),这两种基本信号通过不同的排列顺序表示不同的英文字母、数字和标点符号。例如:国际通用求救信号SOS,它的莫尔斯电码为...---...(三点,三长,三点,即:滴滴滴,嗒嗒嗒,滴滴滴)。

    下面两张表为英文字母和数字的标准莫尔斯电码对照表。

    在摩尔斯电码中,字母 M; 表示为--(电报中为嗒嗒),字母 E; 表示为.(电报中为滴),字母 G; 表示为--.(电报中为嗒嗒滴),因此如果连续发送--.(嗒嗒滴),收报方会误以为是字母 G; 而不是ME。

    那么,为了表示ME,需要在两个字母之间加入间隔,例如,--/.(嗒嗒 / 滴),/可以用时间上的停顿来表示。

    因此,摩尔斯电码除了点信号和长信号,还有不同的间隔时间,根据间隔时间长短,可细分为 : 字符间短的间隔时间、单词之间中等长的间隔时间以及句子之间比较长的间隔时间 。

    请编写一个程序,模拟莫尔斯电码的翻译,输入一串莫尔斯电码,输出其对应的明文信息。

    假设在莫尔斯电码中,点信号用字符 .;(小数点)表示,长信号用字符 -;(减号)表示, 字符间短的间隔时间用一个字符 /; 表示,单词之间中等长的间隔时间用三个字符 /; 表示,句子之间比较长的间隔时间用五个字符 /; 表示。

    例如:

    莫尔斯电码:

    -/..../../...///../...///--/---/.-./..././//-.-./---/-.././////-.../-.--/.

    翻译出来的明文信息为:THIS IS MORSE CODE.BYE

    说明:在输出时,单词之间用一个空格符分隔,句子之间用字符 . 分隔。所有字符均为大写字母。

    输入格式
    第 1 行:一个整数 T(1≤T≤10)为问题数。

    接下来 T 行,每行输入一串莫尔斯电码,电码长度不超过 1000 个字符,电码由.,-,/三种字符构成。

    /表示输入的空格。

    输出格式
    对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题在一行中输出莫尔斯电码表示的明文信息。

    说明:在输出时,单词之间用一个空格符分隔,句子之间用字符. 分隔。英文字母均为大写字母。

    样例
    input
    3
    .../---/...
    -/..../../...///../...///--/---/.-./..././//-.-./---/-.././////-.../-.--/.
    -./---///.----/..---/-----
    output
    case #0:
    SOS
    case #1:
    THIS IS MORSE CODE.BYE
    case #2:
    NO 120

    思路

    思路不是很复杂,只需要把匹配的符号改为数字或字母即可,问题是.和空格的处理,五个/代表.,三个/代表空格,所以我先把这两个给置换成/1/和/2/,之后对于/分割,只需要处理12即可,转换输出即可。
    这里对于字符串改变,用了数组change,匹配的话,下一位就是正确的解,+1即可。

    代码

    public static String[] change = new String[]{
          ".-", "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",
          "1", ".",
          "2", " "
      };
    
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
          System.out.println("case #" + i + ":");
          String line = sc.next();
          line = line.replace("/////","/1/");
          line = line.replace("///","/2/");
          String[] str = line.split("/");
          for (int j = 0; j < str.length; j++) {
            for (int t = 0; t < change.length; t = t + 2) {
              if (str[j].equals(change[t])) {
                System.out.print(change[t + 1]);
                break;
              }
            }
          }
          System.out.println();
        }
      }
    
  • 相关阅读:
    CodeForces 546C(队列)
    N皇后摆放问题
    士兵队列
    货币问题
    C
    B
    ACM第三次比赛 Big Chocolate
    ACM比赛(第三次D)
    ACM第三次比赛UVA11877 The Coco-Cola Store
    uva 10382
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14382717.html
Copyright © 2020-2023  润新知