2 条题解

  • 0
    @ 2025-9-7 10:44:30

    讲一下题目里的参考代码怎么用吧:

    // 这里声明了一个字符串数组并全部赋了值,索引从 0 到 25,依次为 A 到 Z 的电码
    // 后面代码的是同样的道理
    string letterMorse[26] = {
        ".-",    // 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
    };
    
    string numMorse[10] = {
        "-----",  // 0
        ".----",  // 1
        "..---",  // 2
        "...--",  // 3
        "....-",  // 4
        ".....",  // 5
        "-....",  // 6
        "--...",  // 7
        "---..",  // 8
        "----."   // 9
    };
    
    string dotMorse = ".-.-.-";    // 点号
    string commaMorse = "--..--";  // 逗号
    
    string solve(int len, string oristr) { // 当时为了方便生成测试数据将解法写在 solve 函数里
        string res = "";
        for (int i = 0; i < len; i++) {
            // 如果看不懂下面的代码,就去了解 ASCII 码
            if (oristr[i] >= 'A' && oristr[i] <= 'Z') {
                res += letterMorse[oristr[i] - 'A'];
                // 假设 oristr[i] 为 'B',那么 oristr[i] - 'A' 的值就是 1
                // 故字符串 res 就会加上 letterMorse[1],即字母 B 的电码
            } else if (oristr[i] >= 'a' && oristr[i] <= 'z') {
                res += letterMorse[oristr[i] - 'a'];
            } else if (oristr[i] >= '0' && oristr[i] <= '9') {
                res += numMorse[oristr[i] - '0'];
            } else if (oristr[i] == '.') {
                res += dotMorse;
            } else if (oristr[i] == ',') {
                res += commaMorse;
            } else if (oristr[i] == ' ') {
                res += "/";
            }
            
            if (i < len - 1) {
                res += " ";
            }
        }
        return res;
    }
    

    [2025 新生训练赛 2] 摩斯电码(Hard ver.)

    信息

    ID
    184
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    33
    已通过
    9
    上传者