1 条题解
-
0
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