本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
洛谷:B4500 [GESP202603 三级] 凯撒密码 - 洛谷
【题目描述】
凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3 33的时候,所有的字母A AA将被替换成D DD,B BB被替换成E EE,C CC被替换成F FF,以此类推,W WW被替换成Z ZZ,X XX被替换成A AA,Y YY被替换成B BB,Z 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