题解:洛谷 B4500 [GESP202603 三级] 凯撒密码

📅 2026/7/2 12:10:14 👁️ 阅读次数 📝 编程学习
题解:洛谷 B4500 [GESP202603 三级] 凯撒密码

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:B4500 [GESP202603 三级] 凯撒密码 - 洛谷

【题目描述】

凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3 33的时候,所有的字母A AA将被替换成D DDB BB被替换成E EEC CC被替换成F FF,以此类推,W WW被替换成Z ZZX XX被替换成A AAY YY被替换成B BBZ ZZ被替换成C CC。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。

但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

现在给你一个已破解的凯撒密码明文与密文,与一个有相同偏移量的未破解凯撒密码密文,请你帮忙破解它。

【输入】

输入共三行:

第一行包含一个字符串,表示已破解的凯撒密码明文;

第二行包含一个字符串,表示已破解的凯撒密码密文;

第三行包含一个字符串,表示待破解的凯撒密码密文。

【输出】

输出一行,包含一个字符串,表示待破解的凯撒密码对应的明文。

【输入样例】

ABCDEFGVWXYZ DEFGHIJYZABC WKHTXLFNEURZQIRAMXPSVRYHUWKHODCBGRJ

【输出样例】

THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG

【算法标签】

#入门 #字符串入门

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;string a,b,c;// 定义三个字符串:a(明文1), b(密文1), c(要解密的字符串)intmain()// 主函数入口{// 输入:a是已知明文,b是已知密文,c是要解密的密文cin>>a>>b>>c;// 计算加密位移量:b[0]和a[0]的ASCII码差值intdelta=b[0]-a[0];// 遍历要解密的字符串c的每个字符for(inti=0;i<c.size();i++){intnum=c[i]-'A';// 将字符转换为0-25的数字// 进行解密计算:减去位移量,然后取模26确保在0-25范围内num=(num-delta+26)%26;c[i]='A'+num;// 将数字转换回字符}// 输出解密后的字符串cout<<c<<endl;return0;// 程序正常结束}

【运行结果】

ABCDEFGVWXYZ DEFGHIJYZABC WKHTXLFNEURZQIRAMXPSVRYHUWKHODCBGRJ THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG