1 条题解

  • 0
    @ 2025-4-7 9:35:22

    题意分析

    给出一个26位英文密码,分别对应顺序排列的26个英文字母,大写对应大写字母,小写对应小写。给出一段密文,将其翻译成正确内容。

    解题思路

    1. 建立解密映射表
      密钥 key 的每个字符 key[i] 对应字母 'a' + i 的解密结果。
      例如,key = "eydbkmiqugjxlvtzpnwohracsf"

      • key[0] = 'e''a' 解密为 'e'
      • key[1] = 'y''b' 解密为 'y'
      • 以此类推。
    2. 遍历加密消息
      对每个字符:

      • 小写字母:直接替换为 key[ch - 'a']
      • 大写字母:先转换为小写,替换后再转回大写。
      • 非字母字符:保持不变。

    标程

    #include <iostream>
    #include <cctype> 
    using namespace std;
    
    int main() {
        string key, message;
        
        // 读取解密密钥和加密消息
        getline(cin, key);
        getline(cin, message);
        
        // 遍历每个字符进行解密
        for (string::size_type i = 0; i < message.length(); ++i) {
            char ch = message[i];
            if (islower(ch)) {
                // 小写字母:直接替换
                message[i] = key[ch - 'a'];
            } else if (isupper(ch)) {
                // 大写字母:先转小写,替换后再转回大写
                message[i] = toupper(key[tolower(ch) - 'a']);
            }
            // 其他字符(如空格)保持不变
        }
        
        // 输出解密结果
        cout << message << endl;
        return 0;
    }
    • 1

    信息

    ID
    1142
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者