1 条题解

  • 0
    @ 2026-10-18 18:33:56

    G3024 [GESP202603 三级] 凯撒密码 题解

    知识点:字符编码、模运算、字符串替换。

    解题思路

    由已知明文a和密文b计算位移d=(b[0]-a[0]+26)%26,再把待解密字符串每个字母向回移动d格。

    为什么正确

    凯撒加密对每个字符使用同一循环位移,减去该位移即为逆变换。

    易错点

    解密是减d,不是再加d;取模前加26避免负余数。

    复杂度

    时间O(输入总长度),空间O(输入总长度)。

    参考代码(C++17)

    #include<bits/stdc++.h>
    
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        string a,b,s;
        cin>>a>>b>>s;
        int d=(b[0]-a[0]+26)%26;
        for(char c:s)cout<<char('A'+(c-'A'-d+26)%26);
    }
    

    说明

    本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用6个自行生成的测试点。

    • 1

    信息

    ID
    692
    时间
    1000ms
    内存
    512MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者