)
202603-2 凯撒密码回忆版题目描述凯撒密码是一种替换加密技术明文中的所有字母都在字母表上向后或向前按照一个固定数目进行偏移后被替换成密文。例如当偏移量是333的时候所有的字母AAA将被替换成DDDBBB被替换成EEECCC被替换成FFF以此类推WWW被替换成ZZZXXX被替换成AAAYYY被替换成BBBZZZ被替换成CCC。这个加密方法是以罗马共和时期凯撒的名字命名的据称当年凯撒曾用此方法与其将军们进行联系。但是和所有的利用字母表进行替换的加密技术一样凯撒密码非常容易被破解而且在实际应用中也无法保证通信安全。现在给你一个已破解的凯撒密码明文与密文与一个有相同偏移量的未破解凯撒密码密文请你帮忙破解它。输入格式输入共三行第一行包含一个字符串表示已破解的凯撒密码明文第二行包含一个字符串表示已破解的凯撒密码密文第三行包含一个字符串表示待破解的凯撒密码密文。输出格式输出一行包含一个字符串表示待破解的凯撒密码对应的明文。样例输入ABCDEFGVWXYZ DEFGHIJYZABC WKHTXLFNEURZQIRAMXPSVRYHWUKHODCBGRJ样例输出THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG解题思路方法计算偏移量 逆向解密计算偏移量通过已知的明文和密文对计算偏移量n明文第一个字符−密文第一个字符n 明文第一个字符 - 密文第一个字符n明文第一个字符−密文第一个字符例如n′A′−′D′−3n A - D -3n′A′−′D′−3或等价于232323解密过程对待破解的密文进行解密即将每个字符向前偏移∣n∣|n|∣n∣位解密公式明文字符密文字符n明文字符 密文字符 n明文字符密文字符n需要处理边界情况若结果超过 ‘Z’则减去 26若小于 ‘A’则加上 26代码解析#includebits/stdc.husingnamespacestd;intmain(){string s1,s2,s;cins1s2s;// 计算偏移量明文-密文intns1[0]-s2[0];// 对待破解的密文进行解密for(chari:s){in;// 向前偏移n位// 处理边界情况确保在A-Z范围内if(iZ)i-26;elseif(iA)i26;couti;}return0;}样例验证偏移量计算n′A′−′D′−3n A - D -3n′A′−′D′−3解密验证以前几个字符为例‘W’ → ‘W’ (-3) ‘T’‘K’ → ‘K’ (-3) ‘H’‘H’ → ‘H’ (-3) ‘E’‘T’ → ‘T’ (-3) ‘Q’得到 “THEQ…”与预期输出一致。